@7n/rules-ci-github 1.2.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 +15 -0
- package/package.json +49 -0
- package/rules/abie/clean_merged_ignore_branches/clean_merged_ignore_branches.mdc +19 -0
- package/rules/abie/clean_merged_ignore_branches/clean_merged_ignore_branches.rego +81 -0
- package/rules/abie/clean_merged_ignore_branches/concern.json +8 -0
- package/rules/abie/clean_merged_ignore_branches/docs/fix-clean_merged_ignore_branches.md +30 -0
- package/rules/abie/clean_merged_ignore_branches/docs/index.md +9 -0
- package/rules/abie/clean_merged_ignore_branches/fix-clean_merged_ignore_branches.mjs +8 -0
- package/rules/abie/clean_merged_ignore_branches/template/clean-merged-branch.yml.snippet.yml +9 -0
- package/rules/docker/lint_docker_yml/concern.json +11 -0
- package/rules/docker/lint_docker_yml/docs/fix-lint_docker_yml.md +30 -0
- package/rules/docker/lint_docker_yml/docs/index.md +9 -0
- package/rules/docker/lint_docker_yml/fix-lint_docker_yml.mjs +5 -0
- package/rules/docker/lint_docker_yml/lint_docker_yml.mdc +14 -0
- package/rules/docker/lint_docker_yml/lint_docker_yml.rego +79 -0
- package/rules/docker/lint_docker_yml/template/lint-docker.yml.snippet.yml +41 -0
- package/rules/ga/clean_ga_workflows/clean_ga_workflows.mdc +20 -0
- package/rules/ga/clean_ga_workflows/clean_ga_workflows.rego +112 -0
- package/rules/ga/clean_ga_workflows/concern.json +10 -0
- package/rules/ga/clean_ga_workflows/docs/fix-clean_ga_workflows.md +33 -0
- package/rules/ga/clean_ga_workflows/docs/index.md +9 -0
- package/rules/ga/clean_ga_workflows/fix-clean_ga_workflows.mjs +8 -0
- package/rules/ga/clean_ga_workflows/template/clean-ga-workflows.yml.snippet.yml +26 -0
- package/rules/ga/clean_merged_branch/clean_merged_branch.mdc +24 -0
- package/rules/ga/clean_merged_branch/clean_merged_branch.rego +163 -0
- package/rules/ga/clean_merged_branch/concern.json +10 -0
- package/rules/ga/clean_merged_branch/docs/fix-clean_merged_branch.md +27 -0
- package/rules/ga/clean_merged_branch/docs/index.md +9 -0
- package/rules/ga/clean_merged_branch/fix-clean_merged_branch.mjs +8 -0
- package/rules/ga/clean_merged_branch/template/clean-merged-branch.yml.snippet.yml +37 -0
- package/rules/ga/docs/index.md +11 -0
- package/rules/ga/git_ai/concern.json +11 -0
- package/rules/ga/git_ai/docs/fix-git_ai.md +30 -0
- package/rules/ga/git_ai/docs/index.md +9 -0
- package/rules/ga/git_ai/fix-git_ai.mjs +5 -0
- package/rules/ga/git_ai/git_ai.mdc +19 -0
- package/rules/ga/git_ai/git_ai.rego +76 -0
- package/rules/ga/git_ai/template/git-ai.yml.snippet.yml +30 -0
- package/rules/ga/lint_ga/concern.json +10 -0
- package/rules/ga/lint_ga/docs/fix-lint_ga.md +32 -0
- package/rules/ga/lint_ga/docs/index.md +9 -0
- package/rules/ga/lint_ga/fix-lint_ga.mjs +5 -0
- package/rules/ga/lint_ga/lint_ga.mdc +21 -0
- package/rules/ga/lint_ga/lint_ga.rego +132 -0
- package/rules/ga/lint_ga/template/lint-ga.yml.snippet.yml +41 -0
- package/rules/ga/main.json +1 -0
- package/rules/ga/main.mdc +17 -0
- package/rules/ga/vscode_extensions/concern.json +11 -0
- package/rules/ga/vscode_extensions/docs/fix-vscode_extensions.md +25 -0
- package/rules/ga/vscode_extensions/docs/index.md +11 -0
- package/rules/ga/vscode_extensions/fix-vscode_extensions.mjs +1 -0
- package/rules/ga/vscode_extensions/template/extensions.json.snippet.json +1 -0
- package/rules/ga/vscode_extensions/vscode_extensions.mdc +9 -0
- package/rules/ga/vscode_extensions/vscode_extensions.rego +18 -0
- package/rules/ga/vscode_settings/concern.json +11 -0
- package/rules/ga/vscode_settings/docs/fix-vscode_settings.md +26 -0
- package/rules/ga/vscode_settings/docs/index.md +9 -0
- package/rules/ga/vscode_settings/fix-vscode_settings.mjs +5 -0
- package/rules/ga/vscode_settings/template/settings.json.snippet.json +1 -0
- package/rules/ga/vscode_settings/vscode_settings.mdc +9 -0
- package/rules/ga/vscode_settings/vscode_settings.rego +22 -0
- package/rules/ga/workflow_common/concern.json +9 -0
- package/rules/ga/workflow_common/template/uses-min-versions.snippet.json +4 -0
- package/rules/ga/workflow_common/workflow_common.mdc +18 -0
- package/rules/ga/workflow_common/workflow_common.rego +288 -0
- package/rules/ga/workflows/concern.json +8 -0
- package/rules/ga/workflows/docs/fix-workflows.md +37 -0
- package/rules/ga/workflows/docs/main.md +40 -0
- package/rules/ga/workflows/fix-workflows.mjs +212 -0
- package/rules/ga/workflows/main.mjs +436 -0
- package/rules/ga/workflows/workflows.mdc +33 -0
- package/rules/ga/zizmor_yml/concern.json +11 -0
- package/rules/ga/zizmor_yml/docs/fix-zizmor_yml.md +28 -0
- package/rules/ga/zizmor_yml/docs/index.md +9 -0
- package/rules/ga/zizmor_yml/fix-zizmor_yml.mjs +3 -0
- package/rules/ga/zizmor_yml/template/zizmor.yml.snippet.yml +5 -0
- package/rules/ga/zizmor_yml/zizmor_yml.mdc +9 -0
- package/rules/ga/zizmor_yml/zizmor_yml.rego +27 -0
- package/rules/js/lint_js_yml/concern.json +11 -0
- package/rules/js/lint_js_yml/docs/fix-lint_js_yml.md +27 -0
- package/rules/js/lint_js_yml/docs/index.md +9 -0
- package/rules/js/lint_js_yml/fix-lint_js_yml.mjs +5 -0
- package/rules/js/lint_js_yml/lint_js_yml.mdc +14 -0
- package/rules/js/lint_js_yml/lint_js_yml.rego +117 -0
- package/rules/js/lint_js_yml/template/lint-js.yml.snippet.yml +40 -0
- package/rules/k8s/lint_k8s_yml/concern.json +11 -0
- package/rules/k8s/lint_k8s_yml/docs/fix-lint_k8s_yml.md +30 -0
- package/rules/k8s/lint_k8s_yml/docs/index.md +9 -0
- package/rules/k8s/lint_k8s_yml/fix-lint_k8s_yml.mjs +5 -0
- package/rules/k8s/lint_k8s_yml/lint_k8s_yml.rego +57 -0
- package/rules/k8s/lint_k8s_yml/template/lint-k8s.yml.snippet.yml +43 -0
- package/rules/npm-module/npm_publish_yml/concern.json +12 -0
- package/rules/npm-module/npm_publish_yml/docs/fix-npm_publish_yml.md +27 -0
- package/rules/npm-module/npm_publish_yml/docs/index.md +9 -0
- package/rules/npm-module/npm_publish_yml/fix-npm_publish_yml.mjs +8 -0
- package/rules/npm-module/npm_publish_yml/template/npm-publish.yml.snippet.yml +49 -0
- package/rules/php/lint_php_yml/concern.json +11 -0
- package/rules/php/lint_php_yml/docs/fix-lint_php_yml.md +27 -0
- package/rules/php/lint_php_yml/docs/index.md +9 -0
- package/rules/php/lint_php_yml/fix-lint_php_yml.mjs +5 -0
- package/rules/php/lint_php_yml/lint_php_yml.mdc +23 -0
- package/rules/php/lint_php_yml/lint_php_yml.rego +34 -0
- package/rules/php/lint_php_yml/template/lint-php.yml.snippet.yml +47 -0
- package/rules/python/lint_python_yml/concern.json +11 -0
- package/rules/python/lint_python_yml/docs/fix-lint_python_yml.md +26 -0
- package/rules/python/lint_python_yml/docs/index.md +9 -0
- package/rules/python/lint_python_yml/fix-lint_python_yml.mjs +5 -0
- package/rules/python/lint_python_yml/lint_python_yml.mdc +12 -0
- package/rules/python/lint_python_yml/lint_python_yml.rego +68 -0
- package/rules/python/lint_python_yml/template/lint-python.yml.snippet.yml +41 -0
- package/rules/rust/lint_rust_yml/concern.json +11 -0
- package/rules/rust/lint_rust_yml/docs/fix-lint_rust_yml.md +27 -0
- package/rules/rust/lint_rust_yml/docs/index.md +9 -0
- package/rules/rust/lint_rust_yml/fix-lint_rust_yml.mjs +5 -0
- package/rules/rust/lint_rust_yml/lint_rust_yml.mdc +17 -0
- package/rules/rust/lint_rust_yml/lint_rust_yml.rego +79 -0
- package/rules/rust/lint_rust_yml/template/lint-rust.yml.snippet.yml +44 -0
- package/rules/rust/toolchain_cache/concern.json +11 -0
- package/rules/rust/toolchain_cache/docs/fix-toolchain_cache.md +35 -0
- package/rules/rust/toolchain_cache/docs/index.md +12 -0
- package/rules/rust/toolchain_cache/docs/main.md +57 -0
- package/rules/rust/toolchain_cache/fix-toolchain_cache.mjs +117 -0
- package/rules/rust/toolchain_cache/main.mjs +177 -0
- package/rules/rust/toolchain_cache/toolchain_cache.mdc +23 -0
- package/rules/security/lint_security_yml/concern.json +11 -0
- package/rules/security/lint_security_yml/docs/fix-lint_security_yml.md +30 -0
- package/rules/security/lint_security_yml/docs/index.md +9 -0
- package/rules/security/lint_security_yml/fix-lint_security_yml.mjs +8 -0
- package/rules/security/lint_security_yml/lint_security_yml.mdc +7 -0
- package/rules/security/lint_security_yml/lint_security_yml.rego +33 -0
- package/rules/security/lint_security_yml/template/lint-security.yml.snippet.yml +31 -0
- package/rules/style/lint_style_yml/concern.json +11 -0
- package/rules/style/lint_style_yml/docs/fix-lint_style_yml.md +30 -0
- package/rules/style/lint_style_yml/docs/index.md +9 -0
- package/rules/style/lint_style_yml/fix-lint_style_yml.mjs +5 -0
- package/rules/style/lint_style_yml/lint_style_yml.mdc +13 -0
- package/rules/style/lint_style_yml/lint_style_yml.rego +38 -0
- package/rules/style/lint_style_yml/template/lint-style.yml.snippet.yml +39 -0
- package/rules/text/lint_text/concern.json +10 -0
- package/rules/text/lint_text/docs/fix-lint_text.md +27 -0
- package/rules/text/lint_text/docs/index.md +9 -0
- package/rules/text/lint_text/fix-lint_text.mjs +5 -0
- package/rules/text/lint_text/lint_text.mdc +19 -0
- package/rules/text/lint_text/lint_text.rego +104 -0
- package/rules/text/lint_text/template/lint-text.yml.snippet.yml +61 -0
|
@@ -0,0 +1,104 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
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
|