@7n/rules-ci-github 2.4.6 → 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 (55) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/package.json +1 -1
  3. package/rules/rust/toolchain_cache/toolchain_cache.mdc +1 -1
  4. package/rules/text/lint_text/lint_text.rego +24 -9
  5. package/rules/abie/clean_merged_ignore_branches/docs/fix-clean_merged_ignore_branches.md +0 -35
  6. package/rules/abie/clean_merged_ignore_branches/docs/index.md +0 -9
  7. package/rules/abie/clean_merged_ignore_branches/fix-clean_merged_ignore_branches.mjs +0 -18
  8. package/rules/docker/lint_docker_yml/docs/fix-lint_docker_yml.md +0 -33
  9. package/rules/docker/lint_docker_yml/docs/index.md +0 -9
  10. package/rules/docker/lint_docker_yml/fix-lint_docker_yml.mjs +0 -15
  11. package/rules/ga/clean_ga_workflows/docs/fix-clean_ga_workflows.md +0 -33
  12. package/rules/ga/clean_ga_workflows/docs/index.md +0 -9
  13. package/rules/ga/clean_ga_workflows/fix-clean_ga_workflows.mjs +0 -18
  14. package/rules/ga/clean_merged_branch/docs/fix-clean_merged_branch.md +0 -36
  15. package/rules/ga/clean_merged_branch/docs/index.md +0 -9
  16. package/rules/ga/clean_merged_branch/fix-clean_merged_branch.mjs +0 -18
  17. package/rules/ga/git_ai/docs/fix-git_ai.md +0 -40
  18. package/rules/ga/git_ai/docs/index.md +0 -9
  19. package/rules/ga/git_ai/fix-git_ai.mjs +0 -15
  20. package/rules/ga/lint_ga/docs/fix-lint_ga.md +0 -38
  21. package/rules/ga/lint_ga/docs/index.md +0 -9
  22. package/rules/ga/lint_ga/fix-lint_ga.mjs +0 -15
  23. package/rules/ga/lint_repo_yml/docs/fix-lint_repo_yml.md +0 -40
  24. package/rules/ga/lint_repo_yml/docs/index.md +0 -9
  25. package/rules/ga/lint_repo_yml/fix-lint_repo_yml.mjs +0 -15
  26. package/rules/ga/vscode_extensions/docs/fix-vscode_extensions.md +0 -25
  27. package/rules/ga/vscode_extensions/docs/index.md +0 -11
  28. package/rules/ga/vscode_extensions/fix-vscode_extensions.mjs +0 -1
  29. package/rules/ga/vscode_settings/docs/fix-vscode_settings.md +0 -33
  30. package/rules/ga/vscode_settings/docs/index.md +0 -9
  31. package/rules/ga/vscode_settings/fix-vscode_settings.mjs +0 -15
  32. package/rules/ga/workflows/docs/fix-workflows.md +0 -37
  33. package/rules/ga/workflows/docs/index.md +0 -9
  34. package/rules/ga/workflows/fix-workflows.mjs +0 -212
  35. package/rules/ga/zizmor_yml/docs/fix-zizmor_yml.md +0 -33
  36. package/rules/ga/zizmor_yml/docs/index.md +0 -9
  37. package/rules/ga/zizmor_yml/fix-zizmor_yml.mjs +0 -13
  38. package/rules/k8s/lint_k8s_yml/docs/fix-lint_k8s_yml.md +0 -35
  39. package/rules/k8s/lint_k8s_yml/docs/index.md +0 -9
  40. package/rules/k8s/lint_k8s_yml/fix-lint_k8s_yml.mjs +0 -15
  41. package/rules/npm-module/npm_publish_yml/docs/fix-npm_publish_yml.md +0 -37
  42. package/rules/npm-module/npm_publish_yml/docs/index.md +0 -9
  43. package/rules/npm-module/npm_publish_yml/fix-npm_publish_yml.mjs +0 -18
  44. package/rules/rust/toolchain_cache/docs/fix-toolchain_cache.md +0 -35
  45. package/rules/rust/toolchain_cache/docs/index.md +0 -9
  46. package/rules/rust/toolchain_cache/fix-toolchain_cache.mjs +0 -239
  47. package/rules/security/lint_security_yml/docs/fix-lint_security_yml.md +0 -32
  48. package/rules/security/lint_security_yml/docs/index.md +0 -9
  49. package/rules/security/lint_security_yml/fix-lint_security_yml.mjs +0 -14
  50. package/rules/style/lint_style_yml/docs/fix-lint_style_yml.md +0 -31
  51. package/rules/style/lint_style_yml/docs/index.md +0 -9
  52. package/rules/style/lint_style_yml/fix-lint_style_yml.mjs +0 -11
  53. package/rules/text/lint_text/docs/fix-lint_text.md +0 -32
  54. package/rules/text/lint_text/docs/index.md +0 -9
  55. package/rules/text/lint_text/fix-lint_text.mjs +0 -11
@@ -1,33 +0,0 @@
1
- ---
2
- type: JS Module
3
- title: fix-vscode_settings.mjs
4
- resource: plugins/ci-github/rules/ga/vscode_settings/fix-vscode_settings.mjs
5
- docgen:
6
- crc: 39ecd7e7
7
- model: openai-codex/gpt-5.4-mini
8
- tier: cloud-min
9
- score: 100
10
- judgeModel: openai-codex/gpt-5.4-mini
11
- ---
12
-
13
- ## Огляд
14
-
15
- `patterns` задає спільні налаштування VS Code для консюмер-репо відповідно до канонічного шаблону концерну `vscode_settings`. Це потрібно, щоб однаковий базовий набір налаштувань застосовувався узгоджено в усіх споживачах цього шаблону.
16
-
17
- ## Поведінка
18
-
19
- 1. `patterns` задає один канонічний сценарій вирівнювання спільних VS Code-налаштувань у консюмер-репо з корпоративним шаблоном для `settings.json`.
20
- 2. Якщо цільовий `settings.json` відсутній, він створюється на основі канонічного шаблону.
21
- 3. Якщо `settings.json` уже існує, з нього зберігаються всі значення поза шаблоном, а канонічні налаштування концерну мають пріоритет і доповнюють або оновлюють спільну конфігурацію.
22
- 4. Це гарантує, що репозиторії отримують однакову базову поведінку VS Code без втрати локальних несуперечливих налаштувань.
23
-
24
- ## Публічний API
25
-
26
- - patterns — Один детермінований патерн: deep-merge канонічного snippet-а концерну в
27
- `.vscode/settings.json` консюмер-репо — відсутні ключі додаються, канонічні
28
- значення мають пріоритет, ключі поза шаблоном не чіпаються; якщо файлу
29
- немає — створюється зі snippet-а.
30
-
31
- ## Гарантії поведінки
32
-
33
- - Власних операцій запису (ФС/БД) у файлі немає; виклики імпортованих модулів можуть писати.
@@ -1,9 +0,0 @@
1
- ---
2
- type: Directory Index
3
- title: plugins/ci-github/rules/ga/vscode_settings
4
- resource: plugins/ci-github/rules/ga/vscode_settings/
5
- ---
6
-
7
- | Файл | Тип |
8
- | ------------------------------------------------- | --------- |
9
- | [fix-vscode_settings.mjs](fix-vscode_settings.md) | JS Module |
@@ -1,15 +0,0 @@
1
- /**
2
- * T0-фікс концерну vscode_settings: приводить спільні налаштування VS Code
3
- * у консюмер-репо до канонічного шаблону концерну.
4
- */
5
- import { createTemplateFixPattern } from '@7n/rules/scripts/lib/fix/template-deep-merge.mjs'
6
-
7
- /**
8
- * Один детермінований патерн: deep-merge канонічного snippet-а концерну в
9
- * `.vscode/settings.json` консюмер-репо — відсутні ключі додаються, канонічні
10
- * значення мають пріоритет, ключі поза шаблоном не чіпаються; якщо файлу
11
- * немає — створюється зі snippet-а.
12
- */
13
- export const patterns = [
14
- createTemplateFixPattern({ id: 'ga-vscode_settings-template', targetPath: '.vscode/settings.json' })
15
- ]
@@ -1,37 +0,0 @@
1
- ---
2
- type: JS Module
3
- title: fix-workflows.mjs
4
- resource: plugins/ci-github/rules/ga/workflows/fix-workflows.mjs
5
- docgen:
6
- crc: f2f03c5c
7
- ---
8
-
9
- ## Огляд
10
-
11
- T0-autofix для `ga/workflows`: детерміновані текстові правки GitHub Actions workflow-файлів без
12
- участі LLM, керовані structured fix-hint детектора (поле `data.kind` у violation). Виконується у
13
- fix-фазі перед LLM-ладдером; правки незворотні (поза rollback), а коректність підтверджує
14
- повторний прогін детектора.
15
-
16
- ## Поведінка
17
-
18
- - **checkout-persist-credentials** — у кожен крок `actions/checkout`, де бракує
19
- `persist-credentials: false`, дописує цей ключ: створює блок `with:` (відступ за колонкою
20
- `uses:`) або додає ключ у наявний `with:`. Кілька checkout-кроків у файлі обробляються всі.
21
- - **unmatched-paths-glob** — прибирає з `on.<event>.paths` (push / pull_request) list-елементи,
22
- що відповідають застарілим glob-ам із fix-hint; видалення обмежене блоком `paths:`, тож
23
- однойменні значення деінде не зачіпаються.
24
-
25
- Правки текстові — коментарі, форматування й порожні рядки зберігаються, diff мінімальний.
26
-
27
- ## Публічний API
28
-
29
- - `patterns` — масив T0-патернів (`id` / `test` / `apply`), що його споживає центральний fix-pipeline.
30
- - `addPersistCredentials`, `removePathsGlobs` — чисті трансформери вмісту файлу: повертають новий
31
- текст або `null`, якщо змін немає.
32
-
33
- ## Гарантії поведінки
34
-
35
- - Жодного запису без фактичної зміни вмісту; перед записом реєструється pre-image через `recordWrite`.
36
- - Регулярні вирази лінійні (без ReDoS); парсинг list-елементів — рядковими операціями.
37
- - Не-checkout кроки та значення поза блоком `paths:` лишаються недоторканими.
@@ -1,9 +0,0 @@
1
- ---
2
- type: Directory Index
3
- title: plugins/ci-github/rules/ga/workflows
4
- resource: plugins/ci-github/rules/ga/workflows/
5
- ---
6
-
7
- | Файл | Тип |
8
- | ------------------------------------- | --------- |
9
- | [fix-workflows.mjs](fix-workflows.md) | JS Module |
@@ -1,212 +0,0 @@
1
- /** @see ./docs/fix-workflows.md */
2
-
3
- /**
4
- * T0-autofix для `ga/workflows` — детерміновані правки, керовані structured `data`
5
- * детектора (#3 fix-hints), БЕЗ LLM. Покриває дві механічні родини порушень:
6
- * - `checkout-persist-credentials` — дописати `with: persist-credentials: false`
7
- * у кожен `actions/checkout` крок, де його бракує;
8
- * - `unmatched-paths-glob` — прибрати застарілий glob із `on.<event>.paths`.
9
- *
10
- * Трансформації **текстові** (зберігають коментарі/формат/blank-lines, мінімальний diff);
11
- * семантичну коректність гарантує canonical re-detect runner-а (T0 permanent, поза rollback).
12
- * Чисті трансформери експортуються для unit-тестів.
13
- */
14
- import { applyToFiles } from '@7n/rules/scripts/utils/apply-to-files.mjs'
15
-
16
- const CHECKOUT_USES_RE = /uses:\s*actions\/checkout@/u
17
- const WITH_LINE_RE = /^\s*with:\s*$/u
18
- const PERSIST_KEY_RE = /^\s*persist-credentials\s*:/u
19
- const QUOTE_EDGE_RE = /^['"]|['"]$/gu
20
- const PATHS_KEY_RE = /^\s*paths:\s*$/u
21
-
22
- /**
23
- * Індекс першого непорожнього рядка з `from` (включно).
24
- * @param {string[]} lines усі рядки
25
- * @param {number} from стартовий індекс
26
- * @returns {number} індекс непорожнього рядка (або `lines.length`)
27
- */
28
- function nextNonEmpty(lines, from) {
29
- let j = from
30
- while (j < lines.length && lines[j].trim() === '') j++
31
- return j
32
- }
33
-
34
- /**
35
- * Чи блок `with:` (на рядку `withLine`, колонка ключа `col`) уже містить
36
- * `persist-credentials`. Скан до dedent.
37
- * @param {string[]} lines усі рядки
38
- * @param {number} withLine індекс рядка `with:`
39
- * @param {number} col колонка ключа `with:`
40
- * @returns {boolean} true, якщо ключ уже присутній
41
- */
42
- function withBlockHasPersist(lines, withLine, col) {
43
- for (let k = withLine + 1; k < lines.length; k++) {
44
- if (lines[k].trim() === '') continue
45
- const c = lines[k].length - lines[k].trimStart().length
46
- if (c <= col) return false // dedent → блок завершився
47
- if (PERSIST_KEY_RE.test(lines[k])) return true
48
- }
49
- return false
50
- }
51
-
52
- /**
53
- * Insert-план для одного `actions/checkout` кроку на рядку `i` (колонка `uses:` = `col`).
54
- * @param {string[]} lines усі рядки
55
- * @param {number} i індекс рядка `uses:`
56
- * @param {number} col колонка `uses:`
57
- * @returns {{ at: number, text: string[] } | null} вставка або null, якщо ключ уже є
58
- */
59
- function persistInsertFor(lines, i, col) {
60
- const ind = ' '.repeat(col)
61
- const j = nextNonEmpty(lines, i + 1)
62
- const hasWithBlock = j < lines.length && WITH_LINE_RE.test(lines[j]) && lines[j].indexOf('with:') === col
63
- if (hasWithBlock) {
64
- return withBlockHasPersist(lines, j, col) ? null : { at: j + 1, text: [`${ind} persist-credentials: false`] }
65
- }
66
- return { at: i + 1, text: [`${ind}with:`, `${ind} persist-credentials: false`] }
67
- }
68
-
69
- /**
70
- * Дописує `with: persist-credentials: false` у кожен `actions/checkout` крок,
71
- * де його бракує. Дві форми: крок без `with:` (створити блок) і з наявним `with:`
72
- * (вставити ключ). Відступ `with:` = колонка `uses:`; ключа = +2.
73
- * @param {string} content вміст workflow-файла
74
- * @returns {string|null} новий вміст або null, якщо нічого не змінилось
75
- */
76
- export function addPersistCredentials(content) {
77
- const lines = content.split('\n')
78
- /** @type {Array<{ at: number, text: string[] }>} */
79
- const inserts = []
80
- for (let i = 0; i < lines.length; i++) {
81
- const col = lines[i].indexOf('uses:')
82
- if (col === -1 || !CHECKOUT_USES_RE.test(lines[i])) continue
83
- const ins = persistInsertFor(lines, i, col)
84
- if (ins) inserts.push(ins)
85
- }
86
- if (inserts.length === 0) return null
87
- // Згори вниз — індекси не зсуваються під час splice.
88
- inserts.sort((a, b) => b.at - a.at)
89
- for (const ins of inserts) lines.splice(ins.at, 0, ...ins.text)
90
- return lines.join('\n')
91
- }
92
-
93
- /**
94
- * Прибирає list-елементи із заданими значеннями всередині блоків `paths:`
95
- * (`on.push.paths` / `on.pull_request.paths`). Scoped до paths-блоку, щоб не
96
- * зачепити однойменні значення деінде.
97
- * @param {string} content вміст workflow-файла
98
- * @param {Set<string>} globs значення glob-ів на видалення (без лапок)
99
- * @returns {string|null} новий вміст або null, якщо нічого не змінилось
100
- */
101
- export function removePathsGlobs(content, globs) {
102
- const lines = content.split('\n')
103
- /** @type {string[]} */
104
- const out = []
105
- let pathsCol = -1 // колонка ключа `paths:` поточного блоку; -1 = поза блоком
106
- let changed = false
107
- for (const line of lines) {
108
- if (PATHS_KEY_RE.test(line)) {
109
- pathsCol = line.indexOf('paths:')
110
- out.push(line)
111
- continue
112
- }
113
- if (pathsCol >= 0 && line.trim() !== '') {
114
- const col = line.length - line.trimStart().length
115
- if (col > pathsCol) {
116
- // Лінійний парс list-елемента `- <value>` (без regex → без ReDoS).
117
- const trimmed = line.trimStart()
118
- if (trimmed.startsWith('- ')) {
119
- const val = trimmed.slice(2).trim().replace(QUOTE_EDGE_RE, '')
120
- if (globs.has(val)) {
121
- changed = true
122
- continue // викидаємо рядок
123
- }
124
- }
125
- out.push(line)
126
- continue
127
- }
128
- pathsCol = -1 // dedent → блок `paths:` завершився
129
- }
130
- out.push(line)
131
- }
132
- return changed ? out.join('\n') : null
133
- }
134
-
135
- const WRAPPED_NCURSOR_RE = /\b(?:bunx|npx)\s+n-(?:cursor|rules)/u
136
- const RUN_INLINE_NCURSOR_MATCH = /^(\s*(?:-\s*)?run:\s*)n-(?:cursor|rules)(\s.*)$/u
137
- const BARE_LINE_NCURSOR_MATCH = /^(\s+)n-(?:cursor|rules)(\s.*)$/u
138
-
139
- /**
140
- * Префіксує bare `n-rules …` (чи legacy `n-rules …`) у `run`-кроках через `bunx n-rules` (у CI
141
- * бінарник не на PATH). Пропускає рядки, де вже є `bunx`/`npx`. Покриває inline `run:` і рядок у run-блоці.
142
- * @param {string} content вміст workflow-файла
143
- * @returns {string|null} новий вміст або null, якщо нічого не змінилось
144
- */
145
- export function prefixBunxNCursor(content) {
146
- let changed = false
147
- const out = content.split('\n').map(line => {
148
- if (WRAPPED_NCURSOR_RE.test(line)) return line
149
- const inline = RUN_INLINE_NCURSOR_MATCH.exec(line)
150
- if (inline) {
151
- changed = true
152
- return `${inline[1]}bunx n-rules${inline[2]}`
153
- }
154
- const bare = BARE_LINE_NCURSOR_MATCH.exec(line)
155
- if (bare) {
156
- changed = true
157
- return `${bare[1]}bunx n-rules${bare[2]}`
158
- }
159
- return line
160
- })
161
- return changed ? out.join('\n') : null
162
- }
163
-
164
- /** @type {import('@7n/rules/scripts/lib/lint-surface/types.mjs').T0Pattern[]} */
165
- export const patterns = [
166
- {
167
- id: 'ga-workflows-checkout-persist-credentials',
168
- test: violations => violations.some(v => v.data?.kind === 'checkout-persist-credentials' && v.file),
169
- apply: (violations, ctx) => {
170
- const targets = violations.filter(v => v.data?.kind === 'checkout-persist-credentials' && v.file)
171
- const touchedFiles = applyToFiles(targets, ctx, () => addPersistCredentials)
172
- return touchedFiles.length > 0
173
- ? { touchedFiles, message: `persist-credentials: false → ${touchedFiles.length} workflow(s)` }
174
- : { touchedFiles: [] }
175
- }
176
- },
177
- {
178
- id: 'ga-workflows-unmatched-paths-glob',
179
- test: violations => violations.some(v => v.data?.kind === 'unmatched-paths-glob' && v.file),
180
- apply: (violations, ctx) => {
181
- const targets = violations.filter(v => v.data?.kind === 'unmatched-paths-glob' && v.file)
182
- // Глоби на видалення згруповані per-file.
183
- /** @type {Map<string, Set<string>>} */
184
- const byFile = new Map()
185
- for (const v of targets) {
186
- const glob = typeof v.data?.glob === 'string' ? v.data.glob : null
187
- if (!glob) continue
188
- if (!byFile.has(v.file)) byFile.set(v.file, new Set())
189
- byFile.get(v.file).add(glob)
190
- }
191
- const touchedFiles = applyToFiles(
192
- targets,
193
- ctx,
194
- rel => content => removePathsGlobs(content, byFile.get(rel) ?? new Set())
195
- )
196
- return touchedFiles.length > 0
197
- ? { touchedFiles, message: `прибрано не-матчені paths-glob у ${touchedFiles.length} файл(ах)` }
198
- : { touchedFiles: [] }
199
- }
200
- },
201
- {
202
- id: 'ga-workflows-bare-n-rules',
203
- test: violations => violations.some(v => v.data?.kind === 'bare-n-rules' && v.file),
204
- apply: (violations, ctx) => {
205
- const targets = violations.filter(v => v.data?.kind === 'bare-n-rules' && v.file)
206
- const touchedFiles = applyToFiles(targets, ctx, () => prefixBunxNCursor)
207
- return touchedFiles.length > 0
208
- ? { touchedFiles, message: `bunx-префікс n-rules → ${touchedFiles.length} workflow(s)` }
209
- : { touchedFiles: [] }
210
- }
211
- }
212
- ]
@@ -1,33 +0,0 @@
1
- ---
2
- type: JS Module
3
- title: fix-zizmor_yml.mjs
4
- resource: plugins/ci-github/rules/ga/zizmor_yml/fix-zizmor_yml.mjs
5
- docgen:
6
- crc: 9892e20a
7
- model: openai-codex/gpt-5.4-mini
8
- tier: cloud-min
9
- score: 100
10
- judgeModel: openai-codex/gpt-5.4-mini
11
- ---
12
-
13
- ## Огляд
14
-
15
- `patterns` приводить `.github/zizmor.yml` до канонічного шаблону концерну для `zizmor`, щоб консюмер-репо залишалося узгодженим зі стандартизованим конфігом.
16
-
17
- ## Поведінка
18
-
19
- 1. `patterns` визначає один детермінований шаблон для вирівнювання `.github/zizmor.yml` із канонічним концерновим конфігом.
20
- 2. Якщо цільовий файл відсутній, `patterns` ініціалізує його з канонічного snippet-а.
21
- 3. Якщо файл уже існує, `patterns` додає відсутні ключі та зберігає канонічні значення як пріоритетні.
22
- 4. `patterns` не чіпає коментарі й інші ключі поза шаблоном.
23
-
24
- ## Публічний API
25
-
26
- - patterns — Один детермінований патерн: deep-merge канонічного snippet-а концерну в
27
- `.github/zizmor.yml` консюмер-репо — відсутні ключі додаються, канонічні
28
- значення мають пріоритет, коментарі й ключі поза шаблоном не чіпаються;
29
- якщо файлу немає — створюється зі snippet-а.
30
-
31
- ## Гарантії поведінки
32
-
33
- - Власних операцій запису (ФС/БД) у файлі немає; виклики імпортованих модулів можуть писати.
@@ -1,9 +0,0 @@
1
- ---
2
- type: Directory Index
3
- title: plugins/ci-github/rules/ga/zizmor_yml
4
- resource: plugins/ci-github/rules/ga/zizmor_yml/
5
- ---
6
-
7
- | Файл | Тип |
8
- | --------------------------------------- | --------- |
9
- | [fix-zizmor_yml.mjs](fix-zizmor_yml.md) | JS Module |
@@ -1,13 +0,0 @@
1
- /**
2
- * T0-фікс концерну zizmor_yml: приводить конфіг сканера безпеки zizmor
3
- * у консюмер-репо до канонічного шаблону концерну.
4
- */
5
- import { createTemplateFixPattern } from '@7n/rules/scripts/lib/fix/template-deep-merge.mjs'
6
-
7
- /**
8
- * Один детермінований патерн: deep-merge канонічного snippet-а концерну в
9
- * `.github/zizmor.yml` консюмер-репо — відсутні ключі додаються, канонічні
10
- * значення мають пріоритет, коментарі й ключі поза шаблоном не чіпаються;
11
- * якщо файлу немає — створюється зі snippet-а.
12
- */
13
- export const patterns = [createTemplateFixPattern({ id: 'ga-zizmor_yml-template', targetPath: '.github/zizmor.yml' })]
@@ -1,35 +0,0 @@
1
- ---
2
- type: JS Module
3
- title: fix-lint_k8s_yml.mjs
4
- resource: plugins/ci-github/rules/k8s/lint_k8s_yml/fix-lint_k8s_yml.mjs
5
- docgen:
6
- crc: e89c25eb
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
- Файл тримає канонічний сценарій оновлення CI workflow для лінту k8s-домену в consumer-репо, щоб `.github/workflows/lint-k8s.yml` приводився до шаблону концерну. Він існує, щоб звіряти workflow з канонічним snippet-ом концерну й застосовувати стандартний набір змін для цього сценарію, не виходячи за межі `.github` та `.git`.
17
-
18
- ## Поведінка
19
-
20
- 1. `patterns` задає єдиний канонічний сценарій виправлення для CI workflow лінту k8s-домену.
21
- 2. Під час застосування сценарію шаблон концерну зливається з `.github/workflows/lint-k8s.yml`: відсутні елементи додаються, а канонічні значення мають пріоритет.
22
- 3. Якщо цільового файлу немає, `patterns` ініціює його створення з канонічного snippet-а.
23
- 4. `patterns` навмисно не втручається в позатимплейтні ключі та коментарі, а також свідомо пропускає `.github` і `.git` як межі обробки.
24
-
25
- ## Публічний API
26
-
27
- - patterns — Один детермінований патерн: deep-merge канонічного snippet-а концерну в
28
- `.github/workflows/lint-k8s.yml` консюмер-репо — відсутні ключі додаються,
29
- канонічні значення мають пріоритет, коментарі й ключі поза шаблоном не
30
- чіпаються; якщо файлу немає — створюється зі snippet-а.
31
-
32
- ## Гарантії поведінки
33
-
34
- - Власних операцій запису (ФС/БД) у файлі немає; виклики імпортованих модулів можуть писати.
35
- - Свідомо пропускає шляхи: `.github`, `.git`.
@@ -1,9 +0,0 @@
1
- ---
2
- type: Directory Index
3
- title: plugins/ci-github/rules/k8s/lint_k8s_yml
4
- resource: plugins/ci-github/rules/k8s/lint_k8s_yml/
5
- ---
6
-
7
- | Файл | Тип |
8
- | ------------------------------------------- | --------- |
9
- | [fix-lint_k8s_yml.mjs](fix-lint_k8s_yml.md) | JS Module |
@@ -1,15 +0,0 @@
1
- /**
2
- * T0-фікс концерну lint_k8s_yml: приводить CI-workflow лінту k8s-домену
3
- * у консюмер-репо до канонічного шаблону концерну.
4
- */
5
- import { createTemplateFixPattern } from '@7n/rules/scripts/lib/fix/template-deep-merge.mjs'
6
-
7
- /**
8
- * Один детермінований патерн: deep-merge канонічного snippet-а концерну в
9
- * `.github/workflows/lint-k8s.yml` консюмер-репо — відсутні ключі додаються,
10
- * канонічні значення мають пріоритет, коментарі й ключі поза шаблоном не
11
- * чіпаються; якщо файлу немає — створюється зі snippet-а.
12
- */
13
- export const patterns = [
14
- createTemplateFixPattern({ id: 'k8s-lint_k8s_yml-template', targetPath: '.github/workflows/lint-k8s.yml' })
15
- ]
@@ -1,37 +0,0 @@
1
- ---
2
- type: JS Module
3
- title: fix-npm_publish_yml.mjs
4
- resource: plugins/ci-github/rules/npm-module/npm_publish_yml/fix-npm_publish_yml.mjs
5
- docgen:
6
- crc: b7913c3f
7
- model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
- tier: local-min-retry
9
- score: 100
10
- issues: judge:error
11
- judgeModel: openai-codex/gpt-5.4-mini
12
- ---
13
-
14
- ## Огляд
15
-
16
- Приводить конфігураційний файл `.github/workflows/npm-publish.yml` до канонічного шаблону концерну для забезпечення уніфікованого процесу публікації npm-пакетів у репозиторії-споживачі. Функція `patterns` забезпечує, що робочий процес включає необхідні параметри, при цьому ігноруючи каталоги `.github` та `.git`.
17
-
18
- ## Поведінка
19
-
20
- 1. Приводить робочий процес (workflow) публікації npm-пакета в консюмер-репо до канонічного шаблону концерну шляхом застосування детермінованого патерну.
21
- 2. Патерн працює з файлом `.github/workflows/npm-publish.yml`.
22
- 3. Відсутні ключі в файлі додаються, а канонічні значення мають пріоритет; коментарі та ключі поза шаблоном не змінюються.
23
- 4. Якщо вказаний файл не існує, він створюється на основі канонічного snippet-а.
24
- 5. Процес не перевіряє шляхи `.github` та `.git`.
25
- 6. Результат дії визначається масивом, експортованим через `patterns`.
26
-
27
- ## Публічний API
28
-
29
- - patterns — Один детермінований патерн: deep-merge канонічного snippet-а концерну в
30
- `.github/workflows/npm-publish.yml` консюмер-репо — відсутні ключі додаються,
31
- канонічні значення мають пріоритет, коментарі й ключі поза шаблоном не
32
- чіпаються; якщо файлу немає — створюється зі snippet-а.
33
-
34
- ## Гарантії поведінки
35
-
36
- - Власних операцій запису (ФС/БД) у файлі немає; виклики імпортованих модулів можуть писати.
37
- - Свідомо пропускає шляхи: `.github`, `.git`.
@@ -1,9 +0,0 @@
1
- ---
2
- type: Directory Index
3
- title: plugins/ci-github/rules/npm-module/npm_publish_yml
4
- resource: plugins/ci-github/rules/npm-module/npm_publish_yml/
5
- ---
6
-
7
- | Файл | Тип |
8
- | ------------------------------------------------- | --------- |
9
- | [fix-npm_publish_yml.mjs](fix-npm_publish_yml.md) | JS Module |
@@ -1,18 +0,0 @@
1
- /**
2
- * T0-фікс концерну npm_publish_yml: приводить workflow публікації npm-пакета
3
- * у консюмер-репо до канонічного шаблону концерну.
4
- */
5
- import { createTemplateFixPattern } from '@7n/rules/scripts/lib/fix/template-deep-merge.mjs'
6
-
7
- /**
8
- * Один детермінований патерн: deep-merge канонічного snippet-а концерну в
9
- * `.github/workflows/npm-publish.yml` консюмер-репо — відсутні ключі додаються,
10
- * канонічні значення мають пріоритет, коментарі й ключі поза шаблоном не
11
- * чіпаються; якщо файлу немає — створюється зі snippet-а.
12
- */
13
- export const patterns = [
14
- createTemplateFixPattern({
15
- id: 'npm-module-npm_publish_yml-template',
16
- targetPath: '.github/workflows/npm-publish.yml'
17
- })
18
- ]
@@ -1,35 +0,0 @@
1
- ---
2
- type: JS Module
3
- title: fix-toolchain_cache.mjs
4
- resource: plugins/ci-github/rules/rust/toolchain_cache/fix-toolchain_cache.mjs
5
- docgen:
6
- crc: c9db7b48
7
- model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
- score: 100
9
- issues: judge:inaccurate:0.97
10
- judgeModel: openai-codex/gpt-5.4-mini
11
- ---
12
-
13
- ## Огляд
14
-
15
- Управляє логікою кешування `Swatinem/rust-cache@v2` у системі. Додає необхідні кроки кешування до робочих процесів через `insertRustCache` та `addCacheWorkspaces`. Визначає шаблони для застосування трансформерів до файлів з конфігураційними порушеннями, використовуючи `patterns`. Забезпечує механізм fail-safe, перехоплюючи помилки без викиду винятків.
16
-
17
- ## Поведінка
18
-
19
- Поведінка:
20
- insertRustCache вставляє відсутній крок кешування `Swatinem/rust-cache@v2` після кроків, що використовують `dtolnay/rust-toolchain`, у робочих процесах, якщо це можливо.
21
- addCacheWorkspaces дописує конфігурацію `with: workspaces: <dir>` до існуючих кроків кешування `Swatinem/rust-cache@v2` у робочих процесах Tauri, якщо вони не містять цієї інформації.
22
- patterns надає визначення для автоматичного застосування трансформерів до файлів, що містять порушення конфігурації кешування, використовуючи логіку, визначену у файлі.
23
-
24
- ## Публічний API
25
-
26
- insertRustCache — вставляє інструмент для кешування Rust-засобів одразу після кроку з інструментарієм Rust, якщо в цьому ж завдання немає кроку кешування.
27
-
28
- addCacheWorkspaces — додає вказування робочих просторів до кожного кроку кешування Tauri-завдання, де ця інформація відсутня.
29
-
30
- patterns — визначає шаблони, за якими застосовується логіка.
31
-
32
- ## Гарантії поведінки
33
-
34
- - Перехоплює помилки і не пропускає винятків назовні (fail-safe).
35
- - Кешує результати в межах одного прогону.
@@ -1,9 +0,0 @@
1
- ---
2
- type: Directory Index
3
- title: plugins/ci-github/rules/rust/toolchain_cache
4
- resource: plugins/ci-github/rules/rust/toolchain_cache/
5
- ---
6
-
7
- | Файл | Тип |
8
- | ------------------------------------------------- | --------- |
9
- | [fix-toolchain_cache.mjs](fix-toolchain_cache.md) | JS Module |