@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.
- package/CHANGELOG.md +24 -0
- package/package.json +1 -1
- package/rules/rust/toolchain_cache/toolchain_cache.mdc +1 -1
- package/rules/text/lint_text/lint_text.rego +24 -9
- 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,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
|
-
]
|