@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.
- package/CHANGELOG.md +14 -0
- package/package.json +1 -1
- package/rules/rust/toolchain_cache/toolchain_cache.mdc +1 -1
- package/rules/abie/clean_merged_ignore_branches/docs/fix-clean_merged_ignore_branches.md +0 -35
- package/rules/abie/clean_merged_ignore_branches/docs/index.md +0 -9
- package/rules/abie/clean_merged_ignore_branches/fix-clean_merged_ignore_branches.mjs +0 -18
- package/rules/docker/lint_docker_yml/docs/fix-lint_docker_yml.md +0 -33
- package/rules/docker/lint_docker_yml/docs/index.md +0 -9
- package/rules/docker/lint_docker_yml/fix-lint_docker_yml.mjs +0 -15
- package/rules/ga/clean_ga_workflows/docs/fix-clean_ga_workflows.md +0 -33
- package/rules/ga/clean_ga_workflows/docs/index.md +0 -9
- package/rules/ga/clean_ga_workflows/fix-clean_ga_workflows.mjs +0 -18
- package/rules/ga/clean_merged_branch/docs/fix-clean_merged_branch.md +0 -36
- package/rules/ga/clean_merged_branch/docs/index.md +0 -9
- package/rules/ga/clean_merged_branch/fix-clean_merged_branch.mjs +0 -18
- package/rules/ga/git_ai/docs/fix-git_ai.md +0 -40
- package/rules/ga/git_ai/docs/index.md +0 -9
- package/rules/ga/git_ai/fix-git_ai.mjs +0 -15
- package/rules/ga/lint_ga/docs/fix-lint_ga.md +0 -38
- package/rules/ga/lint_ga/docs/index.md +0 -9
- package/rules/ga/lint_ga/fix-lint_ga.mjs +0 -15
- package/rules/ga/lint_repo_yml/docs/fix-lint_repo_yml.md +0 -40
- package/rules/ga/lint_repo_yml/docs/index.md +0 -9
- package/rules/ga/lint_repo_yml/fix-lint_repo_yml.mjs +0 -15
- package/rules/ga/vscode_extensions/docs/fix-vscode_extensions.md +0 -25
- package/rules/ga/vscode_extensions/docs/index.md +0 -11
- package/rules/ga/vscode_extensions/fix-vscode_extensions.mjs +0 -1
- package/rules/ga/vscode_settings/docs/fix-vscode_settings.md +0 -33
- package/rules/ga/vscode_settings/docs/index.md +0 -9
- package/rules/ga/vscode_settings/fix-vscode_settings.mjs +0 -15
- package/rules/ga/workflows/docs/fix-workflows.md +0 -37
- package/rules/ga/workflows/docs/index.md +0 -9
- package/rules/ga/workflows/fix-workflows.mjs +0 -212
- package/rules/ga/zizmor_yml/docs/fix-zizmor_yml.md +0 -33
- package/rules/ga/zizmor_yml/docs/index.md +0 -9
- package/rules/ga/zizmor_yml/fix-zizmor_yml.mjs +0 -13
- package/rules/k8s/lint_k8s_yml/docs/fix-lint_k8s_yml.md +0 -35
- package/rules/k8s/lint_k8s_yml/docs/index.md +0 -9
- package/rules/k8s/lint_k8s_yml/fix-lint_k8s_yml.mjs +0 -15
- package/rules/npm-module/npm_publish_yml/docs/fix-npm_publish_yml.md +0 -37
- package/rules/npm-module/npm_publish_yml/docs/index.md +0 -9
- package/rules/npm-module/npm_publish_yml/fix-npm_publish_yml.mjs +0 -18
- package/rules/rust/toolchain_cache/docs/fix-toolchain_cache.md +0 -35
- package/rules/rust/toolchain_cache/docs/index.md +0 -9
- package/rules/rust/toolchain_cache/fix-toolchain_cache.mjs +0 -239
- package/rules/security/lint_security_yml/docs/fix-lint_security_yml.md +0 -32
- package/rules/security/lint_security_yml/docs/index.md +0 -9
- package/rules/security/lint_security_yml/fix-lint_security_yml.mjs +0 -14
- package/rules/style/lint_style_yml/docs/fix-lint_style_yml.md +0 -31
- package/rules/style/lint_style_yml/docs/index.md +0 -9
- package/rules/style/lint_style_yml/fix-lint_style_yml.mjs +0 -11
- package/rules/text/lint_text/docs/fix-lint_text.md +0 -32
- package/rules/text/lint_text/docs/index.md +0 -9
- package/rules/text/lint_text/fix-lint_text.mjs +0 -11
|
@@ -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,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 |
|