@7n/rules 1.5.1 → 1.7.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 (110) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/bin/n-rules.js +83 -21
  3. package/package.json +1 -2
  4. package/rules/abie/main.mdc +0 -6
  5. package/rules/js/check/docs/main.md +1 -1
  6. package/rules/js/check/main.mjs +6 -10
  7. package/rules/js/main.mdc +0 -1
  8. package/rules/js/vscode_extensions/template/extensions.json.snippet.json +4 -1
  9. package/rules/npm-module/main.mdc +0 -2
  10. package/rules/php/tooling/docs/main.md +1 -1
  11. package/rules/php/tooling/main.mjs +2 -7
  12. package/rules/python/tooling/docs/main.md +1 -1
  13. package/rules/python/tooling/main.mjs +2 -7
  14. package/rules/rego/lib/docs/run-external-tool.md +1 -2
  15. package/rules/rego/lib/run-external-tool.mjs +4 -1
  16. package/rules/security/main.mdc +0 -1
  17. package/rules/style/main.mdc +0 -1
  18. package/rules/style/tooling/docs/main.md +1 -1
  19. package/rules/style/tooling/main.mjs +2 -7
  20. package/rules/tauri/release/release.mdc +1 -1
  21. package/rules/text/formatting/docs/main.md +1 -1
  22. package/rules/text/formatting/main.mjs +11 -11
  23. package/rules/text/main.mdc +0 -1
  24. package/scripts/docs/skills-cli.md +1 -1
  25. package/scripts/lib/acp-runner.mjs +26 -33
  26. package/scripts/lib/docs/acp-runner.md +5 -5
  27. package/scripts/lib/docs/mirror-parity.md +1 -1
  28. package/scripts/lib/mirror-parity.mjs +49 -16
  29. package/scripts/skills-cli.mjs +35 -26
  30. package/rules/abie/clean_merged_ignore_branches/clean_merged_ignore_branches.mdc +0 -19
  31. package/rules/abie/clean_merged_ignore_branches/clean_merged_ignore_branches.rego +0 -81
  32. package/rules/abie/clean_merged_ignore_branches/concern.json +0 -11
  33. package/rules/abie/clean_merged_ignore_branches/docs/fix-clean_merged_ignore_branches.md +0 -31
  34. package/rules/abie/clean_merged_ignore_branches/docs/index.md +0 -9
  35. package/rules/abie/clean_merged_ignore_branches/fix-clean_merged_ignore_branches.mjs +0 -8
  36. package/rules/abie/clean_merged_ignore_branches/template/clean-merged-branch.yml.snippet.yml +0 -9
  37. package/rules/docker/lint_docker_yml/concern.json +0 -12
  38. package/rules/docker/lint_docker_yml/docs/fix-lint_docker_yml.md +0 -31
  39. package/rules/docker/lint_docker_yml/docs/index.md +0 -9
  40. package/rules/docker/lint_docker_yml/fix-lint_docker_yml.mjs +0 -5
  41. package/rules/docker/lint_docker_yml/lint_docker_yml.mdc +0 -14
  42. package/rules/docker/lint_docker_yml/lint_docker_yml.rego +0 -79
  43. package/rules/docker/lint_docker_yml/template/lint-docker.yml.snippet.yml +0 -41
  44. package/rules/js/lint_js_yml/concern.json +0 -12
  45. package/rules/js/lint_js_yml/docs/fix-lint_js_yml.md +0 -28
  46. package/rules/js/lint_js_yml/docs/index.md +0 -9
  47. package/rules/js/lint_js_yml/fix-lint_js_yml.mjs +0 -5
  48. package/rules/js/lint_js_yml/lint_js_yml.mdc +0 -14
  49. package/rules/js/lint_js_yml/lint_js_yml.rego +0 -117
  50. package/rules/js/lint_js_yml/template/lint-js.yml.snippet.yml +0 -40
  51. package/rules/k8s/lint_k8s_yml/concern.json +0 -12
  52. package/rules/k8s/lint_k8s_yml/docs/fix-lint_k8s_yml.md +0 -30
  53. package/rules/k8s/lint_k8s_yml/docs/index.md +0 -9
  54. package/rules/k8s/lint_k8s_yml/fix-lint_k8s_yml.mjs +0 -5
  55. package/rules/k8s/lint_k8s_yml/lint_k8s_yml.rego +0 -57
  56. package/rules/k8s/lint_k8s_yml/template/lint-k8s.yml.snippet.yml +0 -43
  57. package/rules/npm-module/npm_publish_yml/concern.json +0 -13
  58. package/rules/npm-module/npm_publish_yml/docs/fix-npm_publish_yml.md +0 -28
  59. package/rules/npm-module/npm_publish_yml/docs/index.md +0 -9
  60. package/rules/npm-module/npm_publish_yml/fix-npm_publish_yml.mjs +0 -8
  61. package/rules/npm-module/npm_publish_yml/template/npm-publish.yml.snippet.yml +0 -49
  62. package/rules/php/lint_php_yml/concern.json +0 -12
  63. package/rules/php/lint_php_yml/docs/fix-lint_php_yml.md +0 -28
  64. package/rules/php/lint_php_yml/docs/index.md +0 -9
  65. package/rules/php/lint_php_yml/fix-lint_php_yml.mjs +0 -5
  66. package/rules/php/lint_php_yml/lint_php_yml.mdc +0 -23
  67. package/rules/php/lint_php_yml/lint_php_yml.rego +0 -34
  68. package/rules/php/lint_php_yml/template/lint-php.yml.snippet.yml +0 -47
  69. package/rules/python/lint_python_yml/concern.json +0 -12
  70. package/rules/python/lint_python_yml/docs/fix-lint_python_yml.md +0 -27
  71. package/rules/python/lint_python_yml/docs/index.md +0 -9
  72. package/rules/python/lint_python_yml/fix-lint_python_yml.mjs +0 -5
  73. package/rules/python/lint_python_yml/lint_python_yml.mdc +0 -12
  74. package/rules/python/lint_python_yml/lint_python_yml.rego +0 -68
  75. package/rules/python/lint_python_yml/template/lint-python.yml.snippet.yml +0 -41
  76. package/rules/rust/lint_rust_yml/concern.json +0 -14
  77. package/rules/rust/lint_rust_yml/docs/fix-lint_rust_yml.md +0 -28
  78. package/rules/rust/lint_rust_yml/docs/index.md +0 -9
  79. package/rules/rust/lint_rust_yml/fix-lint_rust_yml.mjs +0 -5
  80. package/rules/rust/lint_rust_yml/lint_rust_yml.mdc +0 -17
  81. package/rules/rust/lint_rust_yml/lint_rust_yml.rego +0 -79
  82. package/rules/rust/lint_rust_yml/template/lint-rust.yml.snippet.yml +0 -44
  83. package/rules/rust/toolchain_cache/concern.json +0 -14
  84. package/rules/rust/toolchain_cache/docs/fix-toolchain_cache.md +0 -35
  85. package/rules/rust/toolchain_cache/docs/index.md +0 -12
  86. package/rules/rust/toolchain_cache/docs/main.md +0 -57
  87. package/rules/rust/toolchain_cache/fix-toolchain_cache.mjs +0 -117
  88. package/rules/rust/toolchain_cache/main.mjs +0 -177
  89. package/rules/rust/toolchain_cache/toolchain_cache.mdc +0 -23
  90. package/rules/security/lint_security_yml/concern.json +0 -14
  91. package/rules/security/lint_security_yml/docs/fix-lint_security_yml.md +0 -31
  92. package/rules/security/lint_security_yml/docs/index.md +0 -9
  93. package/rules/security/lint_security_yml/fix-lint_security_yml.mjs +0 -8
  94. package/rules/security/lint_security_yml/lint_security_yml.mdc +0 -7
  95. package/rules/security/lint_security_yml/lint_security_yml.rego +0 -33
  96. package/rules/security/lint_security_yml/template/lint-security.yml.snippet.yml +0 -31
  97. package/rules/style/lint_style_yml/concern.json +0 -12
  98. package/rules/style/lint_style_yml/docs/fix-lint_style_yml.md +0 -31
  99. package/rules/style/lint_style_yml/docs/index.md +0 -9
  100. package/rules/style/lint_style_yml/fix-lint_style_yml.mjs +0 -5
  101. package/rules/style/lint_style_yml/lint_style_yml.mdc +0 -13
  102. package/rules/style/lint_style_yml/lint_style_yml.rego +0 -38
  103. package/rules/style/lint_style_yml/template/lint-style.yml.snippet.yml +0 -39
  104. package/rules/text/lint_text/concern.json +0 -11
  105. package/rules/text/lint_text/docs/fix-lint_text.md +0 -28
  106. package/rules/text/lint_text/docs/index.md +0 -9
  107. package/rules/text/lint_text/fix-lint_text.mjs +0 -5
  108. package/rules/text/lint_text/lint_text.mdc +0 -19
  109. package/rules/text/lint_text/lint_text.rego +0 -104
  110. package/rules/text/lint_text/template/lint-text.yml.snippet.yml +0 -61
@@ -1,9 +0,0 @@
1
- ---
2
- type: Directory Index
3
- title: npm/rules/text/lint_text
4
- resource: npm/rules/text/lint_text/
5
- ---
6
-
7
- | Файл | Тип |
8
- | ------------------------------------- | --------- |
9
- | [fix-lint_text.mjs](fix-lint_text.md) | JS Module |
@@ -1,5 +0,0 @@
1
- import { createTemplateFixPattern } from '../../../scripts/lib/fix/template-deep-merge.mjs'
2
-
3
- export const patterns = [
4
- createTemplateFixPattern({ id: 'text-lint_text-template', targetPath: '.github/workflows/lint-text.yml' })
5
- ]
@@ -1,19 +0,0 @@
1
- ## Перевірка `.github/workflows/lint-text.yml` — структура CI-workflow
2
-
3
- Rego-пакет: `text.lint_text`
4
-
5
- Цільовий файл: `.github/workflows/lint-text.yml`
6
-
7
- **Що перевіряється:**
8
-
9
- - `name` — має бути `"Lint Text"`
10
- - `on.push.branches` та `on.pull_request.branches` — мають містити `dev` і `main`
11
- - `on.push.paths` — має бути надмножиною канонічних glob-ів (усі текстові розширення)
12
- - `jobs.text` — job обов'язковий
13
- - `jobs.text.runs-on` — має бути `ubuntu-latest`
14
- - `jobs.text.permissions.contents` — має бути `read`
15
- - `jobs.text.steps` — не порожній; має містити всі канонічні `uses:` та `run:` підрядки
16
-
17
- Канонічна структура workflow: [lint-text.yml.snippet.yml](./template/lint-text.yml.snippet.yml)
18
-
19
- **Примітка:** conftest парсить YAML 1.1, де ключ `on:` без лапок перетворюється на булевий `true` — rego читає on-блок через `input["true"]`.
@@ -1,104 +0,0 @@
1
- # Перевірка `.github/workflows/lint-text.yml` (text.mdc).
2
- #
3
- # Канон надходить через --data: { "template": { "snippet": ... } }
4
- # Структура --data сформована з template/lint-text.yml.snippet.yml.
5
- # Універсальні workflow-перевірки (checkout, permissions) — у `ga.workflow_common`.
6
- package text.lint_text
7
-
8
- import rego.v1
9
-
10
- expected_name := data.template.snippet.name
11
-
12
- expected_push_branches := {b | some b in data.template.snippet.on.push.branches}
13
-
14
- expected_pr_branches := {b | some b in data.template.snippet.on.pull_request.branches}
15
-
16
- expected_push_paths := {p | some p in data.template.snippet.on.push.paths}
17
-
18
- expected_runs_on := data.template.snippet.jobs.text["runs-on"]
19
-
20
- expected_perms := data.template.snippet.jobs.text.permissions
21
-
22
- # conftest парсить YAML 1.1, де канонічний `on:` без лапок стає булевим ключем
23
- # `true` (як у `ga.lint_ga`). Тому читаємо on-блок через `input["true"]`.
24
- gha_on := input["true"]
25
-
26
- job := input.jobs.text
27
-
28
- job_uses_set contains job.steps[_].uses
29
-
30
- job_run_blob := concat("\n", [run |
31
- run := job.steps[_].run
32
- ])
33
-
34
- expected_uses_set contains u if {
35
- some step in data.template.snippet.jobs.text.steps
36
- u := object.get(step, "uses", "")
37
- u != ""
38
- }
39
-
40
- expected_run_substrings contains r if {
41
- some step in data.template.snippet.jobs.text.steps
42
- r := object.get(step, "run", "")
43
- r != ""
44
- }
45
-
46
- deny contains msg if {
47
- input.name != expected_name
48
- msg := sprintf("lint-text.yml: name має бути %q (text.mdc)", [expected_name])
49
- }
50
-
51
- deny contains msg if {
52
- not branches_superset_of(gha_on.push.branches, expected_push_branches)
53
- msg := "lint-text.yml: on.push.branches має містити dev і main (text.mdc)"
54
- }
55
-
56
- deny contains msg if {
57
- not branches_superset_of(gha_on.pull_request.branches, expected_pr_branches)
58
- msg := "lint-text.yml: on.pull_request.branches має містити dev і main (text.mdc)"
59
- }
60
-
61
- deny contains msg if {
62
- not paths_superset_of(gha_on.push.paths, expected_push_paths)
63
- msg := "lint-text.yml: on.push.paths має містити очікувані glob-и (text.mdc)"
64
- }
65
-
66
- deny contains msg if {
67
- not job
68
- msg := "lint-text.yml: jobs.text відсутній (text.mdc)"
69
- }
70
-
71
- deny contains msg if {
72
- job["runs-on"] != expected_runs_on
73
- msg := sprintf("lint-text.yml: runs-on має бути %s (text.mdc)", [expected_runs_on])
74
- }
75
-
76
- deny contains msg if {
77
- job.permissions.contents != expected_perms.contents
78
- msg := sprintf("lint-text.yml: permissions.contents має бути %s (text.mdc)", [expected_perms.contents])
79
- }
80
-
81
- deny contains msg if {
82
- count(job.steps) == 0
83
- msg := "lint-text.yml: jobs.text.steps відсутні (text.mdc)"
84
- }
85
-
86
- deny contains msg if {
87
- some required_use in expected_uses_set
88
- not required_use in job_uses_set
89
- msg := sprintf("lint-text.yml: має бути uses: %s (text.mdc)", [required_use])
90
- }
91
-
92
- deny contains msg if {
93
- some required_run in expected_run_substrings
94
- not contains(job_run_blob, required_run)
95
- msg := sprintf("lint-text.yml: жоден крок run не містить %q (text.mdc)", [required_run])
96
- }
97
-
98
- branches_superset_of(actual, expected) if {
99
- expected & {b | some b in actual} == expected
100
- }
101
-
102
- paths_superset_of(actual, expected) if {
103
- expected & {p | some p in actual} == expected
104
- }
@@ -1,61 +0,0 @@
1
- name: Lint Text
2
-
3
- on:
4
- push:
5
- branches:
6
- - dev
7
- - main
8
- paths:
9
- - '**/*.js'
10
- - '**/*.ts'
11
- - '**/*.vue'
12
- - '**/*.html'
13
- - '**/*.css'
14
- - '**/*.scss'
15
- - '**/*.less'
16
- - '**/*.json'
17
- - '**/*.jsonc'
18
- - '**/*.yaml'
19
- - '**/*.yml'
20
- - '**/*.toml'
21
- - '**/*.xml'
22
- - '**/*.md'
23
- - '**/*.mdc'
24
- - '**/*.mdс'
25
- - '**/*.txt'
26
- - '**/*.go'
27
- - '**/*.py'
28
- - '**/*.php'
29
- - '**/*.sh'
30
-
31
- pull_request:
32
- branches:
33
- - dev
34
- - main
35
-
36
- concurrency:
37
- group: ${{ github.ref }}-${{ github.workflow }}
38
- cancel-in-progress: true
39
-
40
- jobs:
41
- text:
42
- runs-on: ubuntu-latest
43
- permissions:
44
- contents: read
45
- steps:
46
- - uses: actions/checkout@v6
47
- with:
48
- persist-credentials: false
49
-
50
- - uses: ./.github/actions/setup-bun-deps
51
-
52
- - name: Install shellcheck
53
- run: sudo apt-get update && sudo apt-get install -y shellcheck
54
-
55
- - name: Install dotenv-linter
56
- run: >-
57
- curl -sSfL https://git.io/JLbXn
58
- | sh -s -- -b /usr/local/bin
59
-
60
- - name: Lint text
61
- run: bunx n-rules lint text --no-fix