@vyuhlabs/dxkit 2.4.8 → 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 (243) hide show
  1. package/CHANGELOG.md +235 -0
  2. package/README.md +360 -439
  3. package/dist/analyzers/security/aggregator.d.ts.map +1 -1
  4. package/dist/analyzers/security/aggregator.js +4 -46
  5. package/dist/analyzers/security/aggregator.js.map +1 -1
  6. package/dist/analyzers/tools/fingerprint.d.ts +91 -26
  7. package/dist/analyzers/tools/fingerprint.d.ts.map +1 -1
  8. package/dist/analyzers/tools/fingerprint.js +111 -22
  9. package/dist/analyzers/tools/fingerprint.js.map +1 -1
  10. package/dist/analyzers/tools/generic.d.ts.map +1 -1
  11. package/dist/analyzers/tools/generic.js +6 -1
  12. package/dist/analyzers/tools/generic.js.map +1 -1
  13. package/dist/analyzers/tools/gitleaks.d.ts +24 -1
  14. package/dist/analyzers/tools/gitleaks.d.ts.map +1 -1
  15. package/dist/analyzers/tools/gitleaks.js +20 -11
  16. package/dist/analyzers/tools/gitleaks.js.map +1 -1
  17. package/dist/analyzers/types.d.ts +6 -4
  18. package/dist/analyzers/types.d.ts.map +1 -1
  19. package/dist/baseline/baseline-file.d.ts +104 -0
  20. package/dist/baseline/baseline-file.d.ts.map +1 -0
  21. package/dist/baseline/baseline-file.js +110 -0
  22. package/dist/baseline/baseline-file.js.map +1 -0
  23. package/dist/baseline/check-renderers.d.ts +108 -0
  24. package/dist/baseline/check-renderers.d.ts.map +1 -0
  25. package/dist/baseline/check-renderers.js +379 -0
  26. package/dist/baseline/check-renderers.js.map +1 -0
  27. package/dist/baseline/check.d.ts +127 -0
  28. package/dist/baseline/check.d.ts.map +1 -0
  29. package/dist/baseline/check.js +462 -0
  30. package/dist/baseline/check.js.map +1 -0
  31. package/dist/baseline/content-hash.d.ts +83 -0
  32. package/dist/baseline/content-hash.d.ts.map +1 -0
  33. package/dist/baseline/content-hash.js +131 -0
  34. package/dist/baseline/content-hash.js.map +1 -0
  35. package/dist/baseline/create.d.ts +96 -0
  36. package/dist/baseline/create.d.ts.map +1 -0
  37. package/dist/baseline/create.js +339 -0
  38. package/dist/baseline/create.js.map +1 -0
  39. package/dist/baseline/entry-to-located.d.ts +35 -0
  40. package/dist/baseline/entry-to-located.d.ts.map +1 -0
  41. package/dist/baseline/entry-to-located.js +72 -0
  42. package/dist/baseline/entry-to-located.js.map +1 -0
  43. package/dist/baseline/finding-identity.d.ts +47 -0
  44. package/dist/baseline/finding-identity.d.ts.map +1 -0
  45. package/dist/baseline/finding-identity.js +292 -0
  46. package/dist/baseline/finding-identity.js.map +1 -0
  47. package/dist/baseline/git-aware-match.d.ts +146 -0
  48. package/dist/baseline/git-aware-match.d.ts.map +1 -0
  49. package/dist/baseline/git-aware-match.js +439 -0
  50. package/dist/baseline/git-aware-match.js.map +1 -0
  51. package/dist/baseline/policy.d.ts +171 -0
  52. package/dist/baseline/policy.d.ts.map +1 -0
  53. package/dist/baseline/policy.js +206 -0
  54. package/dist/baseline/policy.js.map +1 -0
  55. package/dist/baseline/producers/health.d.ts +30 -0
  56. package/dist/baseline/producers/health.d.ts.map +1 -0
  57. package/dist/baseline/producers/health.js +42 -0
  58. package/dist/baseline/producers/health.js.map +1 -0
  59. package/dist/baseline/producers/index.d.ts +164 -0
  60. package/dist/baseline/producers/index.d.ts.map +1 -0
  61. package/dist/baseline/producers/index.js +200 -0
  62. package/dist/baseline/producers/index.js.map +1 -0
  63. package/dist/baseline/producers/licenses.d.ts +23 -0
  64. package/dist/baseline/producers/licenses.d.ts.map +1 -0
  65. package/dist/baseline/producers/licenses.js +46 -0
  66. package/dist/baseline/producers/licenses.js.map +1 -0
  67. package/dist/baseline/producers/quality.d.ts +39 -0
  68. package/dist/baseline/producers/quality.d.ts.map +1 -0
  69. package/dist/baseline/producers/quality.js +84 -0
  70. package/dist/baseline/producers/quality.js.map +1 -0
  71. package/dist/baseline/producers/secret-hmac.d.ts +45 -0
  72. package/dist/baseline/producers/secret-hmac.d.ts.map +1 -0
  73. package/dist/baseline/producers/secret-hmac.js +70 -0
  74. package/dist/baseline/producers/secret-hmac.js.map +1 -0
  75. package/dist/baseline/producers/security.d.ts +59 -0
  76. package/dist/baseline/producers/security.d.ts.map +1 -0
  77. package/dist/baseline/producers/security.js +135 -0
  78. package/dist/baseline/producers/security.js.map +1 -0
  79. package/dist/baseline/producers/tests.d.ts +36 -0
  80. package/dist/baseline/producers/tests.d.ts.map +1 -0
  81. package/dist/baseline/producers/tests.js +69 -0
  82. package/dist/baseline/producers/tests.js.map +1 -0
  83. package/dist/baseline/salt.d.ts +45 -0
  84. package/dist/baseline/salt.d.ts.map +1 -0
  85. package/dist/baseline/salt.js +113 -0
  86. package/dist/baseline/salt.js.map +1 -0
  87. package/dist/baseline/show.d.ts +79 -0
  88. package/dist/baseline/show.d.ts.map +1 -0
  89. package/dist/baseline/show.js +233 -0
  90. package/dist/baseline/show.js.map +1 -0
  91. package/dist/baseline/types.d.ts +482 -0
  92. package/dist/baseline/types.d.ts.map +1 -0
  93. package/dist/baseline/types.js +53 -0
  94. package/dist/baseline/types.js.map +1 -0
  95. package/dist/cli.d.ts.map +1 -1
  96. package/dist/cli.js +360 -81
  97. package/dist/cli.js.map +1 -1
  98. package/dist/codebase-scanner.d.ts.map +1 -1
  99. package/dist/codebase-scanner.js +0 -1
  100. package/dist/codebase-scanner.js.map +1 -1
  101. package/dist/constants.d.ts.map +1 -1
  102. package/dist/constants.js +0 -4
  103. package/dist/constants.js.map +1 -1
  104. package/dist/doctor.d.ts.map +1 -1
  105. package/dist/doctor.js +22 -25
  106. package/dist/doctor.js.map +1 -1
  107. package/dist/fail-on.d.ts +84 -0
  108. package/dist/fail-on.d.ts.map +1 -0
  109. package/dist/fail-on.js +128 -0
  110. package/dist/fail-on.js.map +1 -0
  111. package/dist/generator.d.ts.map +1 -1
  112. package/dist/generator.js +2 -141
  113. package/dist/generator.js.map +1 -1
  114. package/dist/languages/csharp.d.ts.map +1 -1
  115. package/dist/languages/csharp.js +0 -9
  116. package/dist/languages/csharp.js.map +1 -1
  117. package/dist/languages/go.d.ts.map +1 -1
  118. package/dist/languages/go.js +0 -15
  119. package/dist/languages/go.js.map +1 -1
  120. package/dist/languages/index.d.ts +1 -1
  121. package/dist/languages/index.d.ts.map +1 -1
  122. package/dist/languages/index.js.map +1 -1
  123. package/dist/languages/java.d.ts.map +1 -1
  124. package/dist/languages/java.js +0 -6
  125. package/dist/languages/java.js.map +1 -1
  126. package/dist/languages/kotlin.d.ts.map +1 -1
  127. package/dist/languages/kotlin.js +0 -11
  128. package/dist/languages/kotlin.js.map +1 -1
  129. package/dist/languages/python.d.ts.map +1 -1
  130. package/dist/languages/python.js +0 -15
  131. package/dist/languages/python.js.map +1 -1
  132. package/dist/languages/ruby.d.ts.map +1 -1
  133. package/dist/languages/ruby.js +0 -6
  134. package/dist/languages/ruby.js.map +1 -1
  135. package/dist/languages/rust.d.ts.map +1 -1
  136. package/dist/languages/rust.js +0 -4
  137. package/dist/languages/rust.js.map +1 -1
  138. package/dist/languages/types.d.ts +2 -28
  139. package/dist/languages/types.d.ts.map +1 -1
  140. package/dist/languages/typescript.d.ts.map +1 -1
  141. package/dist/languages/typescript.js +26 -4
  142. package/dist/languages/typescript.js.map +1 -1
  143. package/dist/lib.d.ts +2 -3
  144. package/dist/lib.d.ts.map +1 -1
  145. package/dist/lib.js +3 -6
  146. package/dist/lib.js.map +1 -1
  147. package/dist/prompts.d.ts.map +1 -1
  148. package/dist/prompts.js +0 -10
  149. package/dist/prompts.js.map +1 -1
  150. package/dist/report-schema.d.ts +42 -0
  151. package/dist/report-schema.d.ts.map +1 -0
  152. package/dist/report-schema.js +54 -0
  153. package/dist/report-schema.js.map +1 -0
  154. package/dist/ship-installers.d.ts +106 -0
  155. package/dist/ship-installers.d.ts.map +1 -0
  156. package/dist/ship-installers.js +415 -0
  157. package/dist/ship-installers.js.map +1 -0
  158. package/dist/types.d.ts +0 -4
  159. package/dist/types.d.ts.map +1 -1
  160. package/dist/update.d.ts.map +1 -1
  161. package/dist/update.js +0 -4
  162. package/dist/update.js.map +1 -1
  163. package/package.json +17 -11
  164. package/templates/.claude/agents/onboarding.md +5 -4
  165. package/templates/.claude/agents-available/codebase-explorer.md +1 -1
  166. package/templates/.claude/agents-available/debugger.md +2 -2
  167. package/templates/.claude/agents-available/health-auditor.md +2 -2
  168. package/templates/.claude/commands/doctor.md +20 -12
  169. package/templates/.claude/skills/build/SKILL.md.template +22 -30
  170. package/templates/.claude/skills/deploy/SKILL.md.template +5 -25
  171. package/templates/.claude/skills/doctor/SKILL.md +24 -47
  172. package/templates/.claude/skills/gcloud/SKILL.md +5 -5
  173. package/templates/.claude/skills/learned/SKILL.md +1 -1
  174. package/templates/.claude/skills/pulumi/SKILL.md +2 -2
  175. package/templates/.claude/skills/quality/SKILL.md.template +4 -23
  176. package/templates/.claude/skills/review/SKILL.md.template +4 -3
  177. package/templates/.claude/skills/scaffold/SKILL.md.template +5 -15
  178. package/templates/.claude/skills/secrets/SKILL.md +20 -21
  179. package/templates/.claude/skills/session/SKILL.md +20 -31
  180. package/templates/.claude/skills/test/SKILL.md.template +1 -7
  181. package/templates/.devcontainer/devcontainer.json +81 -0
  182. package/templates/.devcontainer/install-agent-clis.sh +42 -0
  183. package/templates/.devcontainer/post-create.sh +67 -0
  184. package/templates/.githooks/pre-commit +55 -0
  185. package/templates/.githooks/pre-push +63 -0
  186. package/templates/.github/workflows/dxkit-baseline-refresh.yml +78 -0
  187. package/templates/.github/workflows/dxkit-guardrails.yml +98 -0
  188. package/templates/CLAUDE.md.template +62 -196
  189. package/dist/project-yaml.d.ts +0 -13
  190. package/dist/project-yaml.d.ts.map +0 -1
  191. package/dist/project-yaml.js +0 -188
  192. package/dist/project-yaml.js.map +0 -1
  193. package/templates/.ai/README.md +0 -117
  194. package/templates/.ai/prompts/execution-prompt.md +0 -9
  195. package/templates/.ai/prompts/planning-prompt.md +0 -18
  196. package/templates/.ai/prompts/session-end-template.md +0 -182
  197. package/templates/.ai/prompts/session-end.md +0 -132
  198. package/templates/.ai/prompts/session-start.md +0 -109
  199. package/templates/.ai/prompts/step-by-step.md +0 -113
  200. package/templates/.ai/sessions/.gitkeep +0 -0
  201. package/templates/.claude/commands/setup-pr-review.md +0 -72
  202. package/templates/.devcontainer/Dockerfile.dev.template +0 -89
  203. package/templates/.devcontainer/devcontainer.json.template +0 -184
  204. package/templates/.devcontainer/docker-compose.yml.template +0 -105
  205. package/templates/.devcontainer/init-scripts/01-init.sql.template +0 -12
  206. package/templates/.devcontainer/post-create.sh.template +0 -298
  207. package/templates/.github/workflows/ci.yml.template +0 -399
  208. package/templates/.github/workflows/quality.yml.template +0 -376
  209. package/templates/.pre-commit-config.yaml.template +0 -106
  210. package/templates/.project/config/edit_config.py +0 -275
  211. package/templates/.project/config/project_config.py +0 -894
  212. package/templates/.project/scripts/codegen/generate-all.sh +0 -20
  213. package/templates/.project/scripts/codegen/validate-all.sh +0 -17
  214. package/templates/.project/scripts/docs/generate-all.sh +0 -30
  215. package/templates/.project/scripts/docs/serve.sh +0 -20
  216. package/templates/.project/scripts/quality/fix-all.sh +0 -138
  217. package/templates/.project/scripts/quality/lint-go.sh +0 -34
  218. package/templates/.project/scripts/quality/lint-python.sh +0 -54
  219. package/templates/.project/scripts/quality/run-all.sh +0 -497
  220. package/templates/.project/scripts/session/commit.sh +0 -70
  221. package/templates/.project/scripts/session/create-pr.sh +0 -165
  222. package/templates/.project/scripts/session/end.sh +0 -207
  223. package/templates/.project/scripts/session/start.sh +0 -233
  224. package/templates/.project/scripts/setup/doctor.sh +0 -404
  225. package/templates/.project/scripts/setup/interactive-setup.sh +0 -585
  226. package/templates/.project/scripts/sync/sync-template.sh +0 -328
  227. package/templates/.project/scripts/test/run-all.sh +0 -179
  228. package/templates/.project/scripts/test/run-quick.sh +0 -25
  229. package/templates/Makefile +0 -514
  230. package/templates/config/versions.yaml +0 -57
  231. package/templates/configs/go/.golangci.yml.template +0 -172
  232. package/templates/configs/go/go.mod.template +0 -15
  233. package/templates/configs/java/README.md +0 -6
  234. package/templates/configs/kotlin/README.md +0 -6
  235. package/templates/configs/node/package.json.template +0 -67
  236. package/templates/configs/node/tsconfig.json.template +0 -53
  237. package/templates/configs/python/pyproject.toml.template +0 -92
  238. package/templates/configs/python/pytest.ini.template +0 -64
  239. package/templates/configs/python/ruff.toml.template +0 -79
  240. package/templates/configs/ruby/README.md +0 -6
  241. package/templates/configs/rust/Cargo.toml.template +0 -51
  242. package/templates/configs/shared/.editorconfig +0 -67
  243. package/templates/scripts/validate-templates.sh +0 -449
@@ -1,376 +0,0 @@
1
- # Generated from template - Code Quality Checks
2
- # This workflow runs linting and formatting checks for all enabled languages
3
- # Quality checks can be disabled via .project.yaml or SKIP_QUALITY_CHECKS repo variable
4
- # Configuration is loaded from .project.yaml via project_config.py
5
-
6
- name: Quality Checks
7
-
8
- on:
9
- push:
10
- branches: [main, develop]
11
- pull_request:
12
- branches: [main, develop]
13
-
14
- env:
15
- SKIP_QUALITY_CHECKS: ${{ vars.SKIP_QUALITY_CHECKS || 'false' }}
16
-
17
- jobs:
18
- # Validate configuration and load quality settings
19
- validate:
20
- name: Validate Configuration
21
- runs-on: ubuntu-latest
22
- outputs:
23
- skip_checks: ${{ steps.config.outputs.skip_checks }}
24
- steps:
25
- - name: Checkout code
26
- uses: actions/checkout@v4
27
-
28
- - name: Set up Python for config
29
- uses: actions/setup-python@v5
30
- with:
31
- python-version: "3.12"
32
-
33
- - name: Install PyYAML
34
- run: pip install pyyaml
35
-
36
- - name: Load configuration
37
- id: config
38
- run: |
39
- # Check repo variable first
40
- if [ "$SKIP_QUALITY_CHECKS" = "true" ]; then
41
- echo "Quality checks disabled via SKIP_QUALITY_CHECKS variable"
42
- echo "skip_checks=true" >> $GITHUB_OUTPUT
43
- exit 0
44
- fi
45
-
46
- # Validate .project.yaml exists
47
- if [ ! -f ".project.yaml" ]; then
48
- echo "::warning::Missing .project.yaml - using defaults"
49
- fi
50
-
51
- echo "skip_checks=false" >> $GITHUB_OUTPUT
52
- echo "Quality checks enabled"
53
-
54
- {{#IF_QUALITY_CHECKS}}
55
- # File validation and security checks (sync with pre-commit and make quality)
56
- file-validation:
57
- name: File Validation & Security
58
- runs-on: ubuntu-latest
59
- needs: validate
60
- if: needs.validate.outputs.skip_checks != 'true'
61
-
62
- steps:
63
- - name: Checkout code
64
- uses: actions/checkout@v4
65
-
66
- - name: Set up Python
67
- uses: actions/setup-python@v5
68
- with:
69
- python-version: "3.12"
70
-
71
- - name: Install dependencies
72
- run: pip install pyyaml
73
-
74
- - name: Validate YAML files
75
- run: |
76
- echo "Validating YAML files..."
77
- FAILED=0
78
- for f in $(find . -name "*.yaml" -o -name "*.yml" -type f -not -path "./.git/*" -not -path "./node_modules/*" 2>/dev/null | head -100); do
79
- if ! python3 -c "import yaml; yaml.safe_load(open('$f'))" 2>/dev/null; then
80
- echo "Invalid YAML: $f"
81
- FAILED=1
82
- fi
83
- done
84
- if [ $FAILED -eq 1 ]; then exit 1; fi
85
- echo "All YAML files valid"
86
-
87
- - name: Validate JSON files
88
- run: |
89
- echo "Validating JSON files..."
90
- FAILED=0
91
- for f in $(find . -name "*.json" -type f -not -path "./.git/*" -not -path "./node_modules/*" 2>/dev/null | head -100); do
92
- if ! python3 -c "import json; json.load(open('$f'))" 2>/dev/null; then
93
- echo "Invalid JSON: $f"
94
- FAILED=1
95
- fi
96
- done
97
- if [ $FAILED -eq 1 ]; then exit 1; fi
98
- echo "All JSON files valid"
99
-
100
- - name: Validate TOML files
101
- run: |
102
- echo "Validating TOML files..."
103
- FAILED=0
104
- for f in $(find . -name "*.toml" -type f -not -path "./.git/*" -not -path "./node_modules/*" -not -path "./target/*" 2>/dev/null | head -100); do
105
- if ! python3 -c "import tomllib; tomllib.load(open('$f', 'rb'))" 2>/dev/null; then
106
- echo "Invalid TOML: $f"
107
- FAILED=1
108
- fi
109
- done
110
- if [ $FAILED -eq 1 ]; then exit 1; fi
111
- echo "All TOML files valid"
112
-
113
- - name: Check for merge conflict markers
114
- run: |
115
- echo "Checking for merge conflict markers..."
116
- if grep -rl "^<<<<<<< \|^=======$\|^>>>>>>> " . --include="*.py" --include="*.go" --include="*.js" --include="*.ts" --include="*.yaml" --include="*.yml" --include="*.json" --include="*.md" 2>/dev/null | grep -v ".git" | head -20; then
117
- echo "Merge conflict markers found!"
118
- exit 1
119
- fi
120
- echo "No merge conflict markers found"
121
-
122
- - name: Check for private keys
123
- run: |
124
- echo "Checking for private keys..."
125
- if grep -rl "BEGIN.*PRIVATE KEY" . 2>/dev/null | grep -v ".git" | grep -v "node_modules" | head -20; then
126
- echo "Private keys detected - DO NOT COMMIT!"
127
- exit 1
128
- fi
129
- echo "No private keys detected"
130
-
131
- - name: Check for large files
132
- run: |
133
- echo "Checking for large files (>1MB)..."
134
- LARGE_FILES=$(find . -type f -size +1M -not -path "./.git/*" -not -path "./node_modules/*" -not -path "./target/*" 2>/dev/null | head -20)
135
- if [ -n "$LARGE_FILES" ]; then
136
- echo "Warning: Large files detected:"
137
- echo "$LARGE_FILES"
138
- echo "::warning::Large files detected (>1MB) - consider adding to .gitignore"
139
- fi
140
- echo "Large files check complete"
141
-
142
- {{#IF_PYTHON}}
143
- lint-python:
144
- name: Python Linting & Formatting
145
- runs-on: ubuntu-latest
146
- needs: validate
147
- if: needs.validate.outputs.skip_checks != 'true'
148
-
149
- steps:
150
- - name: Checkout code
151
- uses: actions/checkout@v4
152
-
153
- - name: Set up Python {{PYTHON_VERSION}}
154
- uses: actions/setup-python@v5
155
- with:
156
- python-version: "{{PYTHON_VERSION}}"
157
-
158
- - name: Install dependencies
159
- run: |
160
- python -m pip install --upgrade pip
161
- # Versions synced with .template/config/versions.yaml
162
- pip install pyyaml "ruff>=0.8.0" "mypy>=1.8.0"
163
-
164
- - name: Load quality configuration
165
- id: quality
166
- run: |
167
- if [ -f .project/config/project_config.py ]; then
168
- eval "$(python3 .project/config/project_config.py export python)"
169
- echo "lint_enabled=${PYTHON_LINT_ENABLED:-true}" >> $GITHUB_OUTPUT
170
- echo "typecheck_enabled=${PYTHON_TYPECHECK_ENABLED:-true}" >> $GITHUB_OUTPUT
171
- echo "format_enabled=${PYTHON_FORMAT_ENABLED:-true}" >> $GITHUB_OUTPUT
172
- else
173
- echo "lint_enabled=true" >> $GITHUB_OUTPUT
174
- echo "typecheck_enabled=true" >> $GITHUB_OUTPUT
175
- echo "format_enabled=true" >> $GITHUB_OUTPUT
176
- fi
177
-
178
- - name: Run ruff linter
179
- if: steps.quality.outputs.lint_enabled == 'true'
180
- run: ruff check .
181
-
182
- - name: Check formatting with ruff
183
- if: steps.quality.outputs.format_enabled == 'true'
184
- run: ruff format --check .
185
-
186
- - name: Run mypy type checker
187
- if: steps.quality.outputs.typecheck_enabled == 'true'
188
- run: mypy . || true
189
- continue-on-error: true
190
-
191
- {{/IF_PYTHON}}
192
- {{#IF_GO}}
193
- lint-go:
194
- name: Go Linting & Formatting
195
- runs-on: ubuntu-latest
196
- needs: validate
197
- if: needs.validate.outputs.skip_checks != 'true'
198
-
199
- steps:
200
- - name: Checkout code
201
- uses: actions/checkout@v4
202
-
203
- - name: Set up Go {{GO_VERSION}}
204
- uses: actions/setup-go@v5
205
- with:
206
- go-version: "{{GO_VERSION}}"
207
-
208
- - name: Set up Python for config
209
- uses: actions/setup-python@v5
210
- with:
211
- python-version: "3.12"
212
-
213
- - name: Install PyYAML
214
- run: pip install pyyaml
215
-
216
- - name: Load quality configuration
217
- id: quality
218
- run: |
219
- if [ -f .project/config/project_config.py ]; then
220
- eval "$(python3 .project/config/project_config.py export go)"
221
- echo "lint_enabled=${GO_LINT_ENABLED:-true}" >> $GITHUB_OUTPUT
222
- echo "format_enabled=${GO_FORMAT_ENABLED:-true}" >> $GITHUB_OUTPUT
223
- else
224
- echo "lint_enabled=true" >> $GITHUB_OUTPUT
225
- echo "format_enabled=true" >> $GITHUB_OUTPUT
226
- fi
227
-
228
- - name: Run gofmt
229
- if: steps.quality.outputs.format_enabled == 'true'
230
- run: |
231
- if [ "$(gofmt -l . | wc -l)" -gt 0 ]; then
232
- echo "The following files are not formatted:"
233
- gofmt -l .
234
- exit 1
235
- fi
236
-
237
- - name: Run golangci-lint
238
- if: steps.quality.outputs.lint_enabled == 'true'
239
- uses: golangci/golangci-lint-action@v3
240
- with:
241
- version: latest
242
- args: --timeout=5m
243
-
244
- {{/IF_GO}}
245
- {{#IF_NODE}}
246
- lint-node:
247
- name: Node.js Linting & Formatting
248
- runs-on: ubuntu-latest
249
- needs: validate
250
- if: needs.validate.outputs.skip_checks != 'true'
251
-
252
- steps:
253
- - name: Checkout code
254
- uses: actions/checkout@v4
255
-
256
- - name: Set up Node.js {{NODE_VERSION}}
257
- uses: actions/setup-node@v4
258
- with:
259
- node-version: "{{NODE_VERSION}}"
260
- cache: 'npm'
261
-
262
- - name: Set up Python for config
263
- uses: actions/setup-python@v5
264
- with:
265
- python-version: "3.12"
266
-
267
- - name: Install PyYAML
268
- run: pip install pyyaml
269
-
270
- - name: Load quality configuration
271
- id: quality
272
- run: |
273
- if [ -f .project/config/project_config.py ]; then
274
- eval "$(python3 .project/config/project_config.py export node)"
275
- echo "lint_enabled=${NODE_LINT_ENABLED:-true}" >> $GITHUB_OUTPUT
276
- echo "format_enabled=${NODE_FORMAT_ENABLED:-true}" >> $GITHUB_OUTPUT
277
- else
278
- echo "lint_enabled=true" >> $GITHUB_OUTPUT
279
- echo "format_enabled=true" >> $GITHUB_OUTPUT
280
- fi
281
-
282
- - name: Install dependencies
283
- run: npm ci
284
-
285
- - name: Run ESLint
286
- if: steps.quality.outputs.lint_enabled == 'true'
287
- run: npm run lint
288
- continue-on-error: false
289
-
290
- - name: Check formatting with Prettier
291
- if: steps.quality.outputs.format_enabled == 'true'
292
- run: npx prettier --check 'src/**/*.{ts,js,json}'
293
-
294
- {{/IF_NODE}}
295
- {{#IF_NEXTJS}}
296
- lint-nextjs:
297
- name: Next.js Linting & Formatting
298
- runs-on: ubuntu-latest
299
- needs: validate
300
- if: needs.validate.outputs.skip_checks != 'true'
301
- defaults:
302
- run:
303
- working-directory: frontend
304
-
305
- steps:
306
- - name: Checkout code
307
- uses: actions/checkout@v4
308
-
309
- - name: Set up Node.js {{NODE_VERSION}}
310
- uses: actions/setup-node@v4
311
- with:
312
- node-version: "{{NODE_VERSION}}"
313
- cache: 'npm'
314
- cache-dependency-path: frontend/package-lock.json
315
-
316
- - name: Install dependencies
317
- run: npm ci
318
-
319
- - name: Run ESLint
320
- run: npm run lint
321
-
322
- - name: Check formatting with Prettier
323
- run: npx prettier --check 'src/**/*.{ts,tsx,js,jsx,json,css}'
324
-
325
- - name: Run TypeScript type check
326
- run: npx tsc --noEmit
327
-
328
- {{/IF_NEXTJS}}
329
- {{#IF_RUST}}
330
- lint-rust:
331
- name: Rust Linting & Formatting
332
- runs-on: ubuntu-latest
333
- needs: validate
334
- if: needs.validate.outputs.skip_checks != 'true'
335
-
336
- steps:
337
- - name: Checkout code
338
- uses: actions/checkout@v4
339
-
340
- - name: Set up Rust {{RUST_VERSION}}
341
- uses: actions-rs/toolchain@v1
342
- with:
343
- toolchain: {{RUST_VERSION}}
344
- override: true
345
- components: rustfmt, clippy
346
-
347
- - name: Set up Python for config
348
- uses: actions/setup-python@v5
349
- with:
350
- python-version: "3.12"
351
-
352
- - name: Install PyYAML
353
- run: pip install pyyaml
354
-
355
- - name: Load quality configuration
356
- id: quality
357
- run: |
358
- if [ -f .project/config/project_config.py ]; then
359
- eval "$(python3 .project/config/project_config.py export rust)"
360
- echo "lint_enabled=${RUST_LINT_ENABLED:-true}" >> $GITHUB_OUTPUT
361
- echo "format_enabled=${RUST_FORMAT_ENABLED:-true}" >> $GITHUB_OUTPUT
362
- else
363
- echo "lint_enabled=true" >> $GITHUB_OUTPUT
364
- echo "format_enabled=true" >> $GITHUB_OUTPUT
365
- fi
366
-
367
- - name: Check formatting with rustfmt
368
- if: steps.quality.outputs.format_enabled == 'true'
369
- run: cargo fmt -- --check
370
-
371
- - name: Run clippy linter
372
- if: steps.quality.outputs.lint_enabled == 'true'
373
- run: cargo clippy -- -D warnings
374
-
375
- {{/IF_RUST}}
376
- {{/IF_QUALITY_CHECKS}}
@@ -1,106 +0,0 @@
1
- # Generated from template - Pre-commit hooks configuration
2
- # Install pre-commit: pip install pre-commit
3
- # Setup hooks: pre-commit install
4
-
5
- # Exclude template and framework directories from all hooks
6
- exclude: ^(\.template/|\.project/)
7
-
8
- repos:
9
- {{#IF_PYTHON}}
10
- # Python - Ruff linter and formatter (check-only, use 'make fix' to auto-fix)
11
- # Version synced with .template/config/versions.yaml
12
- - repo: https://github.com/astral-sh/ruff-pre-commit
13
- rev: v0.8.0
14
- hooks:
15
- - id: ruff
16
- - id: ruff-format
17
- args: [--check]
18
-
19
- # Python - Type checking with mypy (sync with make quality)
20
- # Version synced with .template/config/versions.yaml
21
- - repo: https://github.com/pre-commit/mirrors-mypy
22
- rev: v1.8.0
23
- hooks:
24
- - id: mypy
25
- args: [--ignore-missing-imports]
26
- additional_dependencies: []
27
-
28
- {{/IF_PYTHON}}
29
- {{#IF_GO}}
30
- # Go - Formatting and linting (check-only, use 'make fix' to auto-fix)
31
- - repo: https://github.com/golangci/golangci-lint
32
- rev: v1.55.2
33
- hooks:
34
- - id: golangci-lint
35
- args: [--timeout=5m]
36
-
37
- - repo: https://github.com/dnephin/pre-commit-golang
38
- rev: v0.5.1
39
- hooks:
40
- - id: go-fmt
41
- - id: go-imports
42
-
43
- {{/IF_GO}}
44
- {{#IF_NODE}}
45
- # Node.js - ESLint and Prettier (check-only, use 'make fix' to auto-fix)
46
- - repo: https://github.com/pre-commit/mirrors-eslint
47
- rev: v8.56.0
48
- hooks:
49
- - id: eslint
50
- files: \.(js|ts|jsx|tsx)$
51
- types: [file]
52
- additional_dependencies:
53
- - eslint@8.56.0
54
- - '@typescript-eslint/parser@6.19.0'
55
- - '@typescript-eslint/eslint-plugin@6.19.0'
56
-
57
- - repo: https://github.com/pre-commit/mirrors-prettier
58
- rev: v3.1.0
59
- hooks:
60
- - id: prettier
61
- args: [--check]
62
- types_or: [javascript, jsx, ts, tsx, json, yaml, markdown]
63
-
64
- {{/IF_NODE}}
65
- {{#IF_NEXTJS}}
66
- # Next.js - ESLint and TypeScript for frontend directory
67
- - repo: local
68
- hooks:
69
- - id: nextjs-lint
70
- name: Next.js ESLint
71
- entry: bash -c 'cd frontend && npm run lint'
72
- language: system
73
- files: ^frontend/.*\.(js|jsx|ts|tsx)$
74
- pass_filenames: false
75
-
76
- - id: nextjs-typecheck
77
- name: Next.js TypeScript
78
- entry: bash -c 'cd frontend && npx tsc --noEmit'
79
- language: system
80
- files: ^frontend/.*\.(ts|tsx)$
81
- pass_filenames: false
82
-
83
- {{/IF_NEXTJS}}
84
- {{#IF_RUST}}
85
- # Rust - Formatting and linting (check-only, use 'make fix' to auto-fix)
86
- - repo: https://github.com/doublify/pre-commit-rust
87
- rev: v1.0
88
- hooks:
89
- - id: fmt
90
- args: [--manifest-path, Cargo.toml, --, --check]
91
- - id: clippy
92
- args: [--manifest-path, Cargo.toml, --, -D, warnings]
93
-
94
- {{/IF_RUST}}
95
- # Universal hooks - validation only (no auto-fix)
96
- - repo: https://github.com/pre-commit/pre-commit-hooks
97
- rev: v4.5.0
98
- hooks:
99
- - id: check-yaml
100
- - id: check-json
101
- - id: check-toml
102
- - id: check-added-large-files
103
- args: [--maxkb=1000]
104
- - id: check-merge-conflict
105
- - id: check-case-conflict
106
- - id: detect-private-key