@vyuhlabs/dxkit 2.4.8 → 2.5.1

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 (319) hide show
  1. package/CHANGELOG.md +312 -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/tools/graphify.d.ts.map +1 -1
  18. package/dist/analyzers/tools/graphify.js +9 -5
  19. package/dist/analyzers/tools/graphify.js.map +1 -1
  20. package/dist/analyzers/tools/tool-registry.d.ts +19 -1
  21. package/dist/analyzers/tools/tool-registry.d.ts.map +1 -1
  22. package/dist/analyzers/tools/tool-registry.js +25 -0
  23. package/dist/analyzers/tools/tool-registry.js.map +1 -1
  24. package/dist/analyzers/types.d.ts +6 -4
  25. package/dist/analyzers/types.d.ts.map +1 -1
  26. package/dist/baseline/baseline-file.d.ts +104 -0
  27. package/dist/baseline/baseline-file.d.ts.map +1 -0
  28. package/dist/baseline/baseline-file.js +110 -0
  29. package/dist/baseline/baseline-file.js.map +1 -0
  30. package/dist/baseline/check-renderers.d.ts +108 -0
  31. package/dist/baseline/check-renderers.d.ts.map +1 -0
  32. package/dist/baseline/check-renderers.js +379 -0
  33. package/dist/baseline/check-renderers.js.map +1 -0
  34. package/dist/baseline/check.d.ts +127 -0
  35. package/dist/baseline/check.d.ts.map +1 -0
  36. package/dist/baseline/check.js +462 -0
  37. package/dist/baseline/check.js.map +1 -0
  38. package/dist/baseline/content-hash.d.ts +83 -0
  39. package/dist/baseline/content-hash.d.ts.map +1 -0
  40. package/dist/baseline/content-hash.js +131 -0
  41. package/dist/baseline/content-hash.js.map +1 -0
  42. package/dist/baseline/create.d.ts +96 -0
  43. package/dist/baseline/create.d.ts.map +1 -0
  44. package/dist/baseline/create.js +339 -0
  45. package/dist/baseline/create.js.map +1 -0
  46. package/dist/baseline/entry-to-located.d.ts +35 -0
  47. package/dist/baseline/entry-to-located.d.ts.map +1 -0
  48. package/dist/baseline/entry-to-located.js +72 -0
  49. package/dist/baseline/entry-to-located.js.map +1 -0
  50. package/dist/baseline/finding-identity.d.ts +47 -0
  51. package/dist/baseline/finding-identity.d.ts.map +1 -0
  52. package/dist/baseline/finding-identity.js +292 -0
  53. package/dist/baseline/finding-identity.js.map +1 -0
  54. package/dist/baseline/git-aware-match.d.ts +146 -0
  55. package/dist/baseline/git-aware-match.d.ts.map +1 -0
  56. package/dist/baseline/git-aware-match.js +439 -0
  57. package/dist/baseline/git-aware-match.js.map +1 -0
  58. package/dist/baseline/policy.d.ts +171 -0
  59. package/dist/baseline/policy.d.ts.map +1 -0
  60. package/dist/baseline/policy.js +206 -0
  61. package/dist/baseline/policy.js.map +1 -0
  62. package/dist/baseline/producers/health.d.ts +30 -0
  63. package/dist/baseline/producers/health.d.ts.map +1 -0
  64. package/dist/baseline/producers/health.js +42 -0
  65. package/dist/baseline/producers/health.js.map +1 -0
  66. package/dist/baseline/producers/index.d.ts +164 -0
  67. package/dist/baseline/producers/index.d.ts.map +1 -0
  68. package/dist/baseline/producers/index.js +200 -0
  69. package/dist/baseline/producers/index.js.map +1 -0
  70. package/dist/baseline/producers/licenses.d.ts +23 -0
  71. package/dist/baseline/producers/licenses.d.ts.map +1 -0
  72. package/dist/baseline/producers/licenses.js +46 -0
  73. package/dist/baseline/producers/licenses.js.map +1 -0
  74. package/dist/baseline/producers/quality.d.ts +39 -0
  75. package/dist/baseline/producers/quality.d.ts.map +1 -0
  76. package/dist/baseline/producers/quality.js +84 -0
  77. package/dist/baseline/producers/quality.js.map +1 -0
  78. package/dist/baseline/producers/secret-hmac.d.ts +45 -0
  79. package/dist/baseline/producers/secret-hmac.d.ts.map +1 -0
  80. package/dist/baseline/producers/secret-hmac.js +70 -0
  81. package/dist/baseline/producers/secret-hmac.js.map +1 -0
  82. package/dist/baseline/producers/security.d.ts +59 -0
  83. package/dist/baseline/producers/security.d.ts.map +1 -0
  84. package/dist/baseline/producers/security.js +135 -0
  85. package/dist/baseline/producers/security.js.map +1 -0
  86. package/dist/baseline/producers/tests.d.ts +36 -0
  87. package/dist/baseline/producers/tests.d.ts.map +1 -0
  88. package/dist/baseline/producers/tests.js +69 -0
  89. package/dist/baseline/producers/tests.js.map +1 -0
  90. package/dist/baseline/salt.d.ts +45 -0
  91. package/dist/baseline/salt.d.ts.map +1 -0
  92. package/dist/baseline/salt.js +113 -0
  93. package/dist/baseline/salt.js.map +1 -0
  94. package/dist/baseline/show.d.ts +79 -0
  95. package/dist/baseline/show.d.ts.map +1 -0
  96. package/dist/baseline/show.js +233 -0
  97. package/dist/baseline/show.js.map +1 -0
  98. package/dist/baseline/types.d.ts +482 -0
  99. package/dist/baseline/types.d.ts.map +1 -0
  100. package/dist/baseline/types.js +53 -0
  101. package/dist/baseline/types.js.map +1 -0
  102. package/dist/cli.d.ts.map +1 -1
  103. package/dist/cli.js +398 -82
  104. package/dist/cli.js.map +1 -1
  105. package/dist/constants.d.ts.map +1 -1
  106. package/dist/constants.js +0 -4
  107. package/dist/constants.js.map +1 -1
  108. package/dist/doctor.d.ts.map +1 -1
  109. package/dist/doctor.js +39 -35
  110. package/dist/doctor.js.map +1 -1
  111. package/dist/fail-on.d.ts +84 -0
  112. package/dist/fail-on.d.ts.map +1 -0
  113. package/dist/fail-on.js +128 -0
  114. package/dist/fail-on.js.map +1 -0
  115. package/dist/generator.d.ts +1 -1
  116. package/dist/generator.d.ts.map +1 -1
  117. package/dist/generator.js +81 -274
  118. package/dist/generator.js.map +1 -1
  119. package/dist/hooks-cli.d.ts +20 -0
  120. package/dist/hooks-cli.d.ts.map +1 -0
  121. package/dist/hooks-cli.js +145 -0
  122. package/dist/hooks-cli.js.map +1 -0
  123. package/dist/languages/csharp.d.ts.map +1 -1
  124. package/dist/languages/csharp.js +4 -9
  125. package/dist/languages/csharp.js.map +1 -1
  126. package/dist/languages/go.d.ts.map +1 -1
  127. package/dist/languages/go.js +3 -14
  128. package/dist/languages/go.js.map +1 -1
  129. package/dist/languages/index.d.ts +19 -1
  130. package/dist/languages/index.d.ts.map +1 -1
  131. package/dist/languages/index.js +32 -0
  132. package/dist/languages/index.js.map +1 -1
  133. package/dist/languages/java.d.ts.map +1 -1
  134. package/dist/languages/java.js +4 -6
  135. package/dist/languages/java.js.map +1 -1
  136. package/dist/languages/kotlin.d.ts.map +1 -1
  137. package/dist/languages/kotlin.js +9 -11
  138. package/dist/languages/kotlin.js.map +1 -1
  139. package/dist/languages/python.d.ts.map +1 -1
  140. package/dist/languages/python.js +4 -15
  141. package/dist/languages/python.js.map +1 -1
  142. package/dist/languages/ruby.d.ts.map +1 -1
  143. package/dist/languages/ruby.js +4 -6
  144. package/dist/languages/ruby.js.map +1 -1
  145. package/dist/languages/rust.d.ts.map +1 -1
  146. package/dist/languages/rust.js +4 -4
  147. package/dist/languages/rust.js.map +1 -1
  148. package/dist/languages/types.d.ts +29 -28
  149. package/dist/languages/types.d.ts.map +1 -1
  150. package/dist/languages/typescript.d.ts.map +1 -1
  151. package/dist/languages/typescript.js +31 -4
  152. package/dist/languages/typescript.js.map +1 -1
  153. package/dist/lib.d.ts +2 -3
  154. package/dist/lib.d.ts.map +1 -1
  155. package/dist/lib.js +3 -6
  156. package/dist/lib.js.map +1 -1
  157. package/dist/prompts.d.ts.map +1 -1
  158. package/dist/prompts.js +0 -10
  159. package/dist/prompts.js.map +1 -1
  160. package/dist/report-schema.d.ts +42 -0
  161. package/dist/report-schema.d.ts.map +1 -0
  162. package/dist/report-schema.js +54 -0
  163. package/dist/report-schema.js.map +1 -0
  164. package/dist/ship-installers.d.ts +112 -0
  165. package/dist/ship-installers.d.ts.map +1 -0
  166. package/dist/ship-installers.js +530 -0
  167. package/dist/ship-installers.js.map +1 -0
  168. package/dist/tools-cli.d.ts.map +1 -1
  169. package/dist/tools-cli.js +45 -9
  170. package/dist/tools-cli.js.map +1 -1
  171. package/dist/types.d.ts +0 -4
  172. package/dist/types.d.ts.map +1 -1
  173. package/dist/update.d.ts.map +1 -1
  174. package/dist/update.js +0 -4
  175. package/dist/update.js.map +1 -1
  176. package/package.json +17 -11
  177. package/templates/.claude/skills/dxkit-action/SKILL.md +150 -0
  178. package/templates/.claude/skills/dxkit-config/SKILL.md +124 -0
  179. package/templates/.claude/skills/dxkit-hooks/SKILL.md +109 -0
  180. package/templates/.claude/skills/dxkit-init/SKILL.md +93 -0
  181. package/templates/.claude/skills/dxkit-learn/SKILL.md +84 -0
  182. package/templates/.claude/skills/dxkit-reports/SKILL.md +111 -0
  183. package/templates/.devcontainer/devcontainer.json +55 -0
  184. package/templates/.devcontainer/install-agent-clis.sh +42 -0
  185. package/templates/.devcontainer/post-create.sh +81 -0
  186. package/templates/.githooks/pre-commit +55 -0
  187. package/templates/.githooks/pre-push +63 -0
  188. package/templates/.github/workflows/dxkit-baseline-refresh.yml +78 -0
  189. package/templates/.github/workflows/dxkit-guardrails.yml +98 -0
  190. package/templates/AGENTS.md.template +137 -0
  191. package/templates/CLAUDE.md.template +16 -245
  192. package/dist/codebase-scanner.d.ts +0 -36
  193. package/dist/codebase-scanner.d.ts.map +0 -1
  194. package/dist/codebase-scanner.js +0 -688
  195. package/dist/codebase-scanner.js.map +0 -1
  196. package/dist/project-yaml.d.ts +0 -13
  197. package/dist/project-yaml.d.ts.map +0 -1
  198. package/dist/project-yaml.js +0 -188
  199. package/dist/project-yaml.js.map +0 -1
  200. package/templates/.ai/README.md +0 -117
  201. package/templates/.ai/prompts/execution-prompt.md +0 -9
  202. package/templates/.ai/prompts/planning-prompt.md +0 -18
  203. package/templates/.ai/prompts/session-end-template.md +0 -182
  204. package/templates/.ai/prompts/session-end.md +0 -132
  205. package/templates/.ai/prompts/session-start.md +0 -109
  206. package/templates/.ai/prompts/step-by-step.md +0 -113
  207. package/templates/.ai/sessions/.gitkeep +0 -0
  208. package/templates/.claude/agents/doc-writer.md +0 -107
  209. package/templates/.claude/agents/knowledge-bot.md +0 -64
  210. package/templates/.claude/agents/onboarding.md +0 -61
  211. package/templates/.claude/agents/quality-reviewer.md +0 -85
  212. package/templates/.claude/agents-available/code-reviewer.md +0 -29
  213. package/templates/.claude/agents-available/codebase-explorer.md +0 -100
  214. package/templates/.claude/agents-available/dashboard-builder.md +0 -433
  215. package/templates/.claude/agents-available/debugger.md +0 -29
  216. package/templates/.claude/agents-available/dependency-mapper.md +0 -80
  217. package/templates/.claude/agents-available/dev-report.md +0 -108
  218. package/templates/.claude/agents-available/doc-writer.md +0 -107
  219. package/templates/.claude/agents-available/feature-builder.md +0 -163
  220. package/templates/.claude/agents-available/feature-planner.md +0 -185
  221. package/templates/.claude/agents-available/health-auditor.md +0 -95
  222. package/templates/.claude/agents-available/hooks-configurator.md +0 -211
  223. package/templates/.claude/agents-available/knowledge-bot.md +0 -62
  224. package/templates/.claude/agents-available/plan-executor.md +0 -133
  225. package/templates/.claude/agents-available/strategic-planner.md +0 -141
  226. package/templates/.claude/agents-available/test-gap-finder.md +0 -67
  227. package/templates/.claude/agents-available/test-writer.md +0 -34
  228. package/templates/.claude/agents-available/vulnerability-scanner.md +0 -173
  229. package/templates/.claude/commands/ask.md +0 -7
  230. package/templates/.claude/commands/build-feature.md +0 -26
  231. package/templates/.claude/commands/build.md.template +0 -30
  232. package/templates/.claude/commands/check.md.template +0 -43
  233. package/templates/.claude/commands/dashboard.md +0 -28
  234. package/templates/.claude/commands/deps.md +0 -15
  235. package/templates/.claude/commands/dev-report.md +0 -50
  236. package/templates/.claude/commands/docs.md +0 -21
  237. package/templates/.claude/commands/doctor.md +0 -21
  238. package/templates/.claude/commands/enable-agent.md +0 -12
  239. package/templates/.claude/commands/execute-plan.md +0 -25
  240. package/templates/.claude/commands/explore-codebase.md +0 -12
  241. package/templates/.claude/commands/export-pdf.md +0 -30
  242. package/templates/.claude/commands/feature.md +0 -25
  243. package/templates/.claude/commands/fix-issue.md +0 -12
  244. package/templates/.claude/commands/fix.md.template +0 -32
  245. package/templates/.claude/commands/health.md +0 -58
  246. package/templates/.claude/commands/help.md +0 -36
  247. package/templates/.claude/commands/learn.md +0 -48
  248. package/templates/.claude/commands/onboarding.md +0 -21
  249. package/templates/.claude/commands/plan.md +0 -20
  250. package/templates/.claude/commands/quality.md.template +0 -65
  251. package/templates/.claude/commands/session-end.md +0 -40
  252. package/templates/.claude/commands/session-start.md +0 -30
  253. package/templates/.claude/commands/setup-hooks.md +0 -18
  254. package/templates/.claude/commands/setup-pr-review.md +0 -72
  255. package/templates/.claude/commands/stealth-mode.md +0 -17
  256. package/templates/.claude/commands/test-gaps.md +0 -49
  257. package/templates/.claude/commands/test.md.template +0 -40
  258. package/templates/.claude/commands/vulnerabilities.md +0 -49
  259. package/templates/.claude/skills/build/SKILL.md.template +0 -98
  260. package/templates/.claude/skills/deploy/SKILL.md.template +0 -131
  261. package/templates/.claude/skills/deploy/references/gotchas.md +0 -5
  262. package/templates/.claude/skills/doctor/SKILL.md +0 -54
  263. package/templates/.claude/skills/gcloud/SKILL.md +0 -66
  264. package/templates/.claude/skills/gcloud/references/gotchas.md +0 -5
  265. package/templates/.claude/skills/learned/SKILL.md +0 -55
  266. package/templates/.claude/skills/learned/references/conventions.md +0 -11
  267. package/templates/.claude/skills/learned/references/deny-recommendations.md +0 -18
  268. package/templates/.claude/skills/learned/references/gotchas.md +0 -11
  269. package/templates/.claude/skills/pulumi/SKILL.md +0 -73
  270. package/templates/.claude/skills/quality/SKILL.md.template +0 -108
  271. package/templates/.claude/skills/quality/references/gotchas.md +0 -5
  272. package/templates/.claude/skills/review/SKILL.md.template +0 -73
  273. package/templates/.claude/skills/scaffold/SKILL.md.template +0 -123
  274. package/templates/.claude/skills/secrets/SKILL.md +0 -52
  275. package/templates/.claude/skills/session/SKILL.md +0 -43
  276. package/templates/.claude/skills/test/SKILL.md.template +0 -122
  277. package/templates/.claude/skills/test/references/gotchas.md +0 -5
  278. package/templates/.devcontainer/Dockerfile.dev.template +0 -89
  279. package/templates/.devcontainer/devcontainer.json.template +0 -184
  280. package/templates/.devcontainer/docker-compose.yml.template +0 -105
  281. package/templates/.devcontainer/init-scripts/01-init.sql.template +0 -12
  282. package/templates/.devcontainer/post-create.sh.template +0 -298
  283. package/templates/.github/workflows/ci.yml.template +0 -399
  284. package/templates/.github/workflows/quality.yml.template +0 -376
  285. package/templates/.pre-commit-config.yaml.template +0 -106
  286. package/templates/.project/config/edit_config.py +0 -275
  287. package/templates/.project/config/project_config.py +0 -894
  288. package/templates/.project/scripts/codegen/generate-all.sh +0 -20
  289. package/templates/.project/scripts/codegen/validate-all.sh +0 -17
  290. package/templates/.project/scripts/docs/generate-all.sh +0 -30
  291. package/templates/.project/scripts/docs/serve.sh +0 -20
  292. package/templates/.project/scripts/quality/fix-all.sh +0 -138
  293. package/templates/.project/scripts/quality/lint-go.sh +0 -34
  294. package/templates/.project/scripts/quality/lint-python.sh +0 -54
  295. package/templates/.project/scripts/quality/run-all.sh +0 -497
  296. package/templates/.project/scripts/session/commit.sh +0 -70
  297. package/templates/.project/scripts/session/create-pr.sh +0 -165
  298. package/templates/.project/scripts/session/end.sh +0 -207
  299. package/templates/.project/scripts/session/start.sh +0 -233
  300. package/templates/.project/scripts/setup/doctor.sh +0 -404
  301. package/templates/.project/scripts/setup/interactive-setup.sh +0 -585
  302. package/templates/.project/scripts/sync/sync-template.sh +0 -328
  303. package/templates/.project/scripts/test/run-all.sh +0 -179
  304. package/templates/.project/scripts/test/run-quick.sh +0 -25
  305. package/templates/Makefile +0 -514
  306. package/templates/config/versions.yaml +0 -57
  307. package/templates/configs/go/.golangci.yml.template +0 -172
  308. package/templates/configs/go/go.mod.template +0 -15
  309. package/templates/configs/java/README.md +0 -6
  310. package/templates/configs/kotlin/README.md +0 -6
  311. package/templates/configs/node/package.json.template +0 -67
  312. package/templates/configs/node/tsconfig.json.template +0 -53
  313. package/templates/configs/python/pyproject.toml.template +0 -92
  314. package/templates/configs/python/pytest.ini.template +0 -64
  315. package/templates/configs/python/ruff.toml.template +0 -79
  316. package/templates/configs/ruby/README.md +0 -6
  317. package/templates/configs/rust/Cargo.toml.template +0 -51
  318. package/templates/configs/shared/.editorconfig +0 -67
  319. package/templates/scripts/validate-templates.sh +0 -449
@@ -1,449 +0,0 @@
1
- #!/bin/bash
2
- # validate-templates.sh - Validate template files for syntax and processing
3
- #
4
- # This script:
5
- # 1. Processes templates with test values
6
- # 2. Validates YAML, TOML, and JSON syntax
7
- # 3. Checks for unprocessed template variables
8
-
9
- set -e
10
-
11
- CYAN='\033[36m'
12
- GREEN='\033[32m'
13
- YELLOW='\033[33m'
14
- RED='\033[31m'
15
- RESET='\033[0m'
16
-
17
- TEMPLATE_DIR=".template"
18
- TEST_OUTPUT_DIR="/tmp/template-validation-$$"
19
- ERRORS=0
20
- WARNINGS=0
21
-
22
- # Cleanup on exit
23
- cleanup() {
24
- rm -rf "$TEST_OUTPUT_DIR"
25
- }
26
- trap cleanup EXIT
27
-
28
- mkdir -p "$TEST_OUTPUT_DIR"
29
-
30
- echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${RESET}"
31
- echo -e "${CYAN} TEMPLATE VALIDATION${RESET}"
32
- echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${RESET}"
33
- echo ""
34
-
35
- # Check available validation tools
36
- echo -e "${CYAN}Checking validation tools...${RESET}"
37
- TOOLS_AVAILABLE=""
38
- command -v yq &> /dev/null && TOOLS_AVAILABLE="$TOOLS_AVAILABLE yq"
39
- command -v jq &> /dev/null && TOOLS_AVAILABLE="$TOOLS_AVAILABLE jq"
40
- command -v python3 &> /dev/null && TOOLS_AVAILABLE="$TOOLS_AVAILABLE python3"
41
- if [ -n "$TOOLS_AVAILABLE" ]; then
42
- echo -e " Available:${GREEN}$TOOLS_AVAILABLE${RESET}"
43
- else
44
- echo -e " ${YELLOW}Warning: No validation tools found. Install yq, jq, or python3 for best results.${RESET}"
45
- fi
46
- echo ""
47
-
48
- # ============================================================================
49
- # Test Configuration
50
- # ============================================================================
51
-
52
- # Set test values for all template variables
53
- export PROJECT_NAME="test-project"
54
- export PROJECT_NAME_SNAKE="test_project"
55
- export PROJECT_NAME_KEBAB="test-project"
56
- export PROJECT_DESCRIPTION="A test project for template validation"
57
- export GITHUB_ORG="testorg"
58
- export PYTHON_VERSION="3.12"
59
- export GO_VERSION="1.24.0"
60
- export NODE_VERSION="20"
61
- export RUST_VERSION="stable"
62
- export POSTGRES_VERSION="16"
63
- export REDIS_VERSION="7"
64
- export DB_NAME="test_db"
65
- export DB_USER="test_user"
66
- export DB_PASSWORD="test_pass"
67
-
68
- # Include all features for validation
69
- export INCLUDE_PYTHON="true"
70
- export INCLUDE_GO="true"
71
- export INCLUDE_NODE="true"
72
- export INCLUDE_NEXTJS="true"
73
- export INCLUDE_RUST="true"
74
- export INCLUDE_POSTGRES="true"
75
- export INCLUDE_REDIS="true"
76
- export INCLUDE_AI_SESSIONS="true"
77
- export INCLUDE_AI_PROMPTS="true"
78
- export INCLUDE_PRECOMMIT="true"
79
- export INCLUDE_DOCKER="true"
80
- export INCLUDE_PULUMI="false"
81
- export INCLUDE_GH_CLI="true"
82
- export INCLUDE_CLAUDE_CODE="true"
83
- export INCLUDE_INFISICAL="false"
84
- export INCLUDE_GCLOUD="true"
85
- export INCLUDE_QUALITY_CHECKS="true"
86
- export COVERAGE_THRESHOLD="80"
87
-
88
- # ============================================================================
89
- # Helper Functions
90
- # ============================================================================
91
-
92
- # Use the Python template engine for processing
93
- # This ensures validation uses the exact same logic as actual template processing
94
- TEMPLATE_ENGINE="scripts/bootstrap/template_engine.py"
95
-
96
- if [ ! -f "$TEMPLATE_ENGINE" ]; then
97
- echo -e "${RED}Error: Template engine not found at $TEMPLATE_ENGINE${RESET}"
98
- exit 1
99
- fi
100
-
101
- process_test_template() {
102
- local input_file="$1"
103
- local output_file="$2"
104
-
105
- mkdir -p "$(dirname "$output_file")"
106
-
107
- # Use Python template engine (same as apply-config.sh)
108
- if ! python3 "$TEMPLATE_ENGINE" "$input_file" "$output_file" 2>/dev/null; then
109
- return 1
110
- fi
111
- }
112
-
113
- check_unprocessed_variables() {
114
- local file="$1"
115
- # Match {{VAR}} but not ${{ }} (GitHub Actions expressions)
116
- # Our template vars are {{WORD}} or {{#IF_X}}/{{/IF_X}}
117
- local result=$(grep -oE '\{\{[A-Z_#/][A-Z_0-9]*\}\}' "$file" 2>/dev/null || true)
118
- if [ -n "$result" ]; then
119
- echo -e " ${RED}ERROR${RESET}: Unprocessed template variables found:"
120
- echo "$result" | while read -r var; do
121
- echo " - $var"
122
- done
123
- return 1
124
- fi
125
- return 0
126
- }
127
-
128
- validate_yaml() {
129
- local file="$1"
130
- local error_msg=""
131
-
132
- # Try yq first (fastest, most reliable)
133
- if command -v yq &> /dev/null; then
134
- error_msg=$(yq eval '.' "$file" 2>&1)
135
- if [ $? -eq 0 ]; then
136
- return 0
137
- fi
138
- echo ""
139
- echo -e " ${RED}YAML Error:${RESET} $error_msg"
140
- return 1
141
- fi
142
-
143
- # Try Python yaml module
144
- if command -v python3 &> /dev/null; then
145
- error_msg=$(python3 -c "
146
- import yaml
147
- import sys
148
- try:
149
- with open('$file') as f:
150
- yaml.safe_load(f)
151
- except yaml.YAMLError as e:
152
- print(str(e), file=sys.stderr)
153
- sys.exit(1)
154
- " 2>&1)
155
- if [ $? -eq 0 ]; then
156
- return 0
157
- fi
158
- echo ""
159
- echo -e " ${RED}YAML Error:${RESET} $error_msg"
160
- return 1
161
- fi
162
-
163
- # Fallback: basic syntax check (no detailed errors)
164
- if ! grep -qE '^\s*[a-zA-Z_-]+:\s*$|^\s*[a-zA-Z_-]+:\s+\S' "$file" 2>/dev/null; then
165
- return 1
166
- fi
167
- return 0
168
- }
169
-
170
- validate_toml() {
171
- local file="$1"
172
- local error_msg=""
173
-
174
- if command -v python3 &> /dev/null; then
175
- # Try tomllib (Python 3.11+) or tomli
176
- error_msg=$(python3 -c "
177
- import sys
178
- try:
179
- import tomllib
180
- with open('$file', 'rb') as f:
181
- tomllib.load(f)
182
- except ImportError:
183
- try:
184
- import tomli
185
- with open('$file', 'rb') as f:
186
- tomli.load(f)
187
- except ImportError:
188
- # No TOML parser available, skip validation
189
- sys.exit(0)
190
- except Exception as e:
191
- print(str(e), file=sys.stderr)
192
- sys.exit(1)
193
- " 2>&1)
194
- if [ $? -eq 0 ]; then
195
- return 0
196
- fi
197
- echo ""
198
- echo -e " ${RED}TOML Error:${RESET} $error_msg"
199
- return 1
200
- fi
201
- # Fallback: no validation available
202
- return 0
203
- }
204
-
205
- validate_json() {
206
- local file="$1"
207
- local error_msg=""
208
-
209
- # Try jq first for strict JSON
210
- if command -v jq &> /dev/null; then
211
- error_msg=$(jq '.' "$file" 2>&1)
212
- if [ $? -eq 0 ]; then
213
- return 0
214
- fi
215
- # If jq fails, it might be JSONC (JSON with comments), try Python
216
- fi
217
-
218
- if command -v python3 &> /dev/null; then
219
- # Handle JSONC (JSON with Comments) - strip comments before parsing
220
- error_msg=$(python3 -c "
221
- import json
222
- import re
223
- import sys
224
-
225
- with open('$file', 'r') as f:
226
- lines = f.readlines()
227
-
228
- # Process line by line to safely handle comments
229
- cleaned_lines = []
230
- for line in lines:
231
- stripped = line.strip()
232
- # Skip full-line block comments
233
- if stripped.startswith('/*') and stripped.endswith('*/'):
234
- continue
235
- # Skip line comments at start
236
- if re.match(r'^\s*//', stripped):
237
- continue
238
- cleaned_lines.append(line)
239
-
240
- content = ''.join(cleaned_lines)
241
- # Remove trailing commas before } or ]
242
- content = re.sub(r',\s*([}\]])', r'\1', content)
243
-
244
- try:
245
- json.loads(content)
246
- except json.JSONDecodeError as e:
247
- print(f'Line {e.lineno}, Column {e.colno}: {e.msg}', file=sys.stderr)
248
- sys.exit(1)
249
- " 2>&1)
250
- if [ $? -eq 0 ]; then
251
- return 0
252
- fi
253
- echo ""
254
- echo -e " ${RED}JSON Error:${RESET} $error_msg"
255
- return 1
256
- fi
257
-
258
- echo ""
259
- echo -e " ${YELLOW}Warning:${RESET} No JSON validator available (install jq or python3)"
260
- return 1
261
- }
262
-
263
- # ============================================================================
264
- # Validation Tests
265
- # ============================================================================
266
-
267
- echo -e "${CYAN}Processing and validating templates...${RESET}"
268
- echo ""
269
-
270
- # Test YAML templates
271
- yaml_templates=(
272
- ".template/.github/workflows/ci.yml.template"
273
- ".template/.github/workflows/quality.yml.template"
274
- ".template/.pre-commit-config.yaml.template"
275
- ".template/configs/go/.golangci.yml.template"
276
- )
277
-
278
- for template in "${yaml_templates[@]}"; do
279
- if [ -f "$template" ]; then
280
- output_file="$TEST_OUTPUT_DIR/$(basename "$template" .template)"
281
- process_test_template "$template" "$output_file"
282
-
283
- echo -n " Testing $(basename "$template")... "
284
-
285
- if ! check_unprocessed_variables "$output_file"; then
286
- ((ERRORS++))
287
- continue
288
- fi
289
-
290
- if validate_yaml "$output_file"; then
291
- echo -e "${GREEN}PASS${RESET}"
292
- else
293
- echo -e "${RED}FAIL${RESET} (YAML syntax error)"
294
- ((ERRORS++))
295
- fi
296
- else
297
- echo -e " ${YELLOW}SKIP${RESET}: $template (not found)"
298
- ((WARNINGS++))
299
- fi
300
- done
301
-
302
- echo ""
303
-
304
- # Test TOML templates
305
- toml_templates=(
306
- ".template/configs/python/pyproject.toml.template"
307
- ".template/configs/python/ruff.toml.template"
308
- ".template/configs/rust/Cargo.toml.template"
309
- )
310
-
311
- for template in "${toml_templates[@]}"; do
312
- if [ -f "$template" ]; then
313
- output_file="$TEST_OUTPUT_DIR/$(basename "$template" .template)"
314
- process_test_template "$template" "$output_file"
315
-
316
- echo -n " Testing $(basename "$template")... "
317
-
318
- if ! check_unprocessed_variables "$output_file"; then
319
- ((ERRORS++))
320
- continue
321
- fi
322
-
323
- if validate_toml "$output_file"; then
324
- echo -e "${GREEN}PASS${RESET}"
325
- else
326
- echo -e "${RED}FAIL${RESET} (TOML syntax error)"
327
- ((ERRORS++))
328
- fi
329
- else
330
- echo -e " ${YELLOW}SKIP${RESET}: $template (not found)"
331
- ((WARNINGS++))
332
- fi
333
- done
334
-
335
- echo ""
336
-
337
- # Test JSON templates
338
- json_templates=(
339
- ".template/configs/node/package.json.template"
340
- ".template/configs/node/tsconfig.json.template"
341
- )
342
-
343
- for template in "${json_templates[@]}"; do
344
- if [ -f "$template" ]; then
345
- output_file="$TEST_OUTPUT_DIR/$(basename "$template" .template)"
346
- process_test_template "$template" "$output_file"
347
-
348
- echo -n " Testing $(basename "$template")... "
349
-
350
- if ! check_unprocessed_variables "$output_file"; then
351
- ((ERRORS++))
352
- continue
353
- fi
354
-
355
- if validate_json "$output_file"; then
356
- echo -e "${GREEN}PASS${RESET}"
357
- else
358
- echo -e "${RED}FAIL${RESET} (JSON syntax error)"
359
- ((ERRORS++))
360
- fi
361
- else
362
- echo -e " ${YELLOW}SKIP${RESET}: $template (not found)"
363
- ((WARNINGS++))
364
- fi
365
- done
366
-
367
- echo ""
368
-
369
- # Test INI templates (basic validation)
370
- ini_templates=(
371
- ".template/configs/python/pytest.ini.template"
372
- )
373
-
374
- for template in "${ini_templates[@]}"; do
375
- if [ -f "$template" ]; then
376
- output_file="$TEST_OUTPUT_DIR/$(basename "$template" .template)"
377
- process_test_template "$template" "$output_file"
378
-
379
- echo -n " Testing $(basename "$template")... "
380
-
381
- if ! check_unprocessed_variables "$output_file"; then
382
- ((ERRORS++))
383
- continue
384
- fi
385
-
386
- # INI files don't have strict validation, just check for unprocessed vars
387
- echo -e "${GREEN}PASS${RESET}"
388
- else
389
- echo -e " ${YELLOW}SKIP${RESET}: $template (not found)"
390
- ((WARNINGS++))
391
- fi
392
- done
393
-
394
- echo ""
395
-
396
- # Test Go module template
397
- go_templates=(
398
- ".template/configs/go/go.mod.template"
399
- )
400
-
401
- for template in "${go_templates[@]}"; do
402
- if [ -f "$template" ]; then
403
- output_file="$TEST_OUTPUT_DIR/$(basename "$template" .template)"
404
- process_test_template "$template" "$output_file"
405
-
406
- echo -n " Testing $(basename "$template")... "
407
-
408
- if ! check_unprocessed_variables "$output_file"; then
409
- ((ERRORS++))
410
- continue
411
- fi
412
-
413
- # Check go.mod has valid go version format (X.Y not X.Y.Z)
414
- if grep -qE '^go [0-9]+\.[0-9]+$' "$output_file"; then
415
- echo -e "${GREEN}PASS${RESET}"
416
- else
417
- echo -e "${RED}FAIL${RESET} (Invalid go version format)"
418
- ((ERRORS++))
419
- fi
420
- else
421
- echo -e " ${YELLOW}SKIP${RESET}: $template (not found)"
422
- ((WARNINGS++))
423
- fi
424
- done
425
-
426
- echo ""
427
-
428
- # ============================================================================
429
- # Results
430
- # ============================================================================
431
-
432
- echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${RESET}"
433
- if [ $ERRORS -eq 0 ]; then
434
- echo -e "${GREEN} VALIDATION PASSED${RESET}"
435
- echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${RESET}"
436
- echo ""
437
- echo " All templates validated successfully!"
438
- [ $WARNINGS -gt 0 ] && echo " (${WARNINGS} warnings - some templates not found)"
439
- echo ""
440
- exit 0
441
- else
442
- echo -e "${RED} VALIDATION FAILED${RESET}"
443
- echo -e "${RED}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${RESET}"
444
- echo ""
445
- echo " ${ERRORS} error(s) found"
446
- [ $WARNINGS -gt 0 ] && echo " ${WARNINGS} warning(s)"
447
- echo ""
448
- exit 1
449
- fi